iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中InnoDB与MyISAM的区别
  • 367
分享到

MySQL中InnoDB与MyISAM的区别

2024-04-02 19:04:59 367人浏览 薄情痞子
摘要

这期内容当中的小编将会给大家带来有关Mysql中InnoDB与MyISAM的区别,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。InnoDB存储引擎InnoDB,是mysql的数据库引擎

这期内容当中的小编将会给大家带来有关Mysql中InnoDB与MyISAM的区别,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

InnoDB存储引擎

InnoDB,是mysql数据库引擎之一,现为Mysql的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于postgresql

InnoDB 给 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。

MyISAM存储引擎

MyISAM是默认存储引擎(Mysql5.1前)。它基于更老的ISAM代码,但有很多有用的扩展。(注意MySQL 5.1不支持ISAM)。 每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。

InnoDB和MyISAM的区别

事务

为了数据库操作的原子性,我们需要事务。保证一组操作要么都成功,要么都失败,比如转账的功能。我们通常将多条SQL语句放在begincommit之间,组成一个事务。

InnoDB支持,MyISAM不支持。

索引

为了优化查询的速度,进行排序和匹配查找,我们需要索引。比如所有人的姓名从a-z首字母进行顺序存储,当我们查找zhangsan或者第44位的时候就可以很快的定位到我们想要的位置进行查找。

InnoDB是聚集索引,数据和主键的聚集索引绑定在一起,通过主键索引效率很高。如果通过其他列的辅助索引来进行查找,需要先查找到聚集索引,再查询到所有数据,需要两次查询。

MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据的指针。

InnoDB 1.2.x版本,MySQL5.6版本后,两者都支持全文索引。

auto_increment自增

对于自增数的字段,InnoDB要求该列必须是索引,同时必须是索引的第一个列,否则会报错:

mysql> create table test(
    -> a int auto_increment,
    -> b int,
    -> key(b,a)
    -> ) engine=InnoDB;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

(b,a)顺序替换为(a,b)即可。

MyISAM可以将该字段与其他字段随意顺序组成成联合索引。

表行数

很常见的需求是看表中有多少条数据,此时我们需要select count(*) from table_name

InnoDB不保存表行数,需要进行全表扫描。MyISAM用一个变量保存,直接读取该值,更快。当时当带有where查询的时候,两者一样。

存储

数据库的文件都是需要在磁盘中进行存储,当应用需要时再读取到内存中。一般包含数据文件、索引文件。

InnoDB分为:

  • .frm表结构文件
  • .ibdata1共享表空间
  • .ibd表独占空间
  • .redo日志文件

MyISAM分为三个文件:

  • .frm存储表定义
  • .MYD存储表数据
  • .MYI存储表索引

主键

由于InnoDB的聚集索引,其如果没有指定主键,就会自动生成主键。
MyISAM支持没有主键的表存在。

外键

为了解决复杂逻辑的依赖,我们需要外键。比如高考成绩的录入,必须归属于某位同学,我们就需要高考成绩数据库里有准考证号的外键。

InnoDB支持,MyISAM不支持。

执行速度

如果你的操作是大量的查询操作,如SELECT,使用MyISAM性能会更好。
如果大部分是删除和更改的操作,使用InnoDB

InnoDBMyISAM的索引都是B+树索引,通过索引可以查询到数据的主键,不熟悉B+树的可以查看MySQL InnoDB索引原理和算法。两者的性能区别主要在于查询到数据主键后两者的处理方式却不同。

InnoDB缓存索引和数据文件,一般以16KB为一个最小单元(数据页大小)和磁盘进行交互,InnoDB在查询到索引数据后实际得到的是主键的ID,它需要在内存中的数据页中查找该行的全部数据,但如果该数据不是加载过的热数据,还需要进行数据页的查找和替换,这其中可能牵涉到多次I/O操作和内存中数据查找,导致耗时较高。

MyISAM存储引擎只缓存索引文件,不缓存数据文件,其数据文件的缓存直接使用操作系统的缓存,这点非常独特。此时相同的空间能够加载更多的索引,因此当缓存空间有限时,MyISAM的索引数据页替换次数会更少。根据前面我们知道MyISAM的文件分为MYIMYD,当我们通过MYI查找到主键ID时,其实得到是MYD数据文件的offset偏移量,查找数据比InnoDB寻址映射要快的多。

但由于MyISAM是表,而InnoDB支持行锁,因此在牵涉到大量写操作时,InnoDB的并发性能比MyISAM好很多。同时InnoDB还通过MVVC多版本控制来提高并发读写性能。

delete删除数据

调用delete from table时,MyISAM会直接重建表,InnoDB会一行一行的删除,但是可以用truncate table代替。参考: mysql清空表数据的两种方式和区别。

MyISAM仅支持表锁,每次操作锁定整张表。
InnoDB支持行锁,每次操作锁住最小数量的行数据。

表锁相比于行锁消耗的资源更少,且不会出现死锁,但同时并发性能差。行锁消耗更多的资源,速度较慢,且可能发生死锁,但是因为锁定的粒度小、数据少,并发性能好。如果InnoDB的一条语句无法确定要扫描的范围,也会锁定整张表。

当行锁发生死锁的时候,会计算每个事务影响的行数,然后回滚行数较少的事务。

数据恢复

MyISAM崩溃后无法快速的安全恢复。InnoDB有一套完善的恢复机制。

数据缓存

MyISAM仅缓存索引数据,通过索引查询数据。InnoDB不仅缓存索引数据,同时缓存数据信息,将数据按页读取到缓存池,按LRU(Latest Rare Use 最近最少使用)算法来进行更新。

如何选择存储引擎

创建表的语句都是相同的,只有最后的type来指定存储引擎。

MyISAM

1、大量查询总count

2、查询频繁,插入不频繁

3、没有事务操作

InnoDB

1、需要高可用性,或者需要事务

2、表更新频繁

上述就是小编为大家分享的MySQL中InnoDB与MyISAM的区别了,如果您也有类似的疑惑,不妨碍参照上述分析进行理解。如果想了解更多相关内容,请关注编程网数据库。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中InnoDB与MyISAM的区别

本文链接: https://www.lsjlt.com/news/38424.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中MyISAM与InnoDB区别是什么
    MySQL中MyISAM与InnoDB区别是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!MyISAM和InnoDB的...
    99+
    2024-04-02
  • mysql中myisam与innodb的区别是什么
    MyISAM和InnoDB是MySQL数据库中两种最常用的存储引擎,它们之间有一些重要的区别: ACID属性:InnoDB支持事...
    99+
    2024-03-15
    mysql myisam innodb
  • InnoDB和MyISAM的区别
    一、数据存放结构不同 InnoDB和MyISAM是Mysql的两种存储引擎,所谓存储引擎,就是数据文件的组织方式,其最大的不同,就是数据存储的结构和方式不一样。InnoDB采用聚簇索引来存储数据,MyISAM采用非聚簇索引。 也就是说,In...
    99+
    2023-08-21
    数据库 mysql java
  • Mysql中MyISAM和InnoDB的区别及说明
    目录MyISAM和InnoDB的区别1. 定义2. 区别3. 使用MyISAM和InnoDB索引结构分析存储引擎作用于什么对象MyISAM和InnoDB对索引和数据的存储在磁盘上是如何体现的MyISAM主键索引与辅助索引...
    99+
    2022-12-26
    Mysql中MyISAM Mysql中InnoDB MyISAM和InnoDB的区别
  • MySQL 中 InnoDB 和 MyISAM 的区别是什么
    今天就跟大家聊聊有关MySQL 中 InnoDB 和 MyISAM 的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  InnoDB 和 ...
    99+
    2024-04-02
  • Mysql中myisam和innodb的区别有哪些
    这篇文章给大家分享的是有关Mysql中myisam和innodb的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 (1)5点不同 1. 存储结构 &nb...
    99+
    2024-04-02
  • Mysql中 InnoDB和MyISAM的区别是什么
    本篇文章给大家分享的是有关Mysql中 InnoDB和MyISAM的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 Inn...
    99+
    2024-04-02
  • InnoDB和MyISAM有什么区别
    这篇文章主要讲解了“InnoDB和MyISAM有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“InnoDB和MyISAM有什么区别”吧! Inno...
    99+
    2024-04-02
  • InnoDB和MyISAM的区别是什么
    InnoDB和MyISAM的区别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。InnoDB和MyISAM是许多人在使用MySQL时最常用...
    99+
    2024-04-02
  • MySQL存储引擎MyISAM与InnoDB区别总结整理
    1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎...
    99+
    2024-04-02
  • InnoDB和MyISAM有哪些区别
    这篇文章主要讲解了“InnoDB和MyISAM有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“InnoDB和MyISAM有哪些区别”吧! ...
    99+
    2024-04-02
  • MySQL中InnoDB与MyISAM的对比分析
    小编给大家分享一下MySQL中InnoDB与MyISAM的对比分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!对比InnoDB与MyISAM1、 存储结构MyI...
    99+
    2023-06-27
  • MyISAM和InnoDB存储引擎的区别
    目录 前言存储引擎 区别事务外键表单的存储数据查询效率数据更新效率 如何选择 前言 MyISAM和InnoDB是使用MySQL最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoD...
    99+
    2023-08-17
    数据库 mysql java
  • MyISAM和InnoDB的主要区别和应用场景
    主要区别: 1).MyISAM是非事务安全型的,而InnoDB是事务安全型的。 2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定。 3).MyISAM支持全文类...
    99+
    2024-04-02
  • MySQL中MyISAM引擎与InnoDB引擎性能比较
    MySQL中MyISAM引擎与InnoDB引擎性能比较,基本上我们可以考虑使用InnoDB来替代我们的MyISAM引擎。MySQL表结构CREATE TABLE `myisam` (`id` int(11)...
    99+
    2024-04-02
  • 浅谈一下MyISAM和InnoDB存储引擎的区别
    目录前言存储引擎区别事务外键表单的存储数据查询效率数据更新效率如何选择前言 MyISAM和InnoDB是使用mysql最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引...
    99+
    2023-04-28
    Mysql MyISAM Mysql InnoDB Mysql 存储引擎
  • mysql数据存储引擎InnoDB和MyISAM的优势及区别是什么
    这篇文章主要介绍“mysql数据存储引擎InnoDB和MyISAM的优势及区别是什么”,在日常操作中,相信很多人在mysql数据存储引擎InnoDB和MyISAM的优势及区别是什么问题上存在疑惑,小编查阅了...
    99+
    2024-04-02
  • MySQL存储引擎InnoDB与Myisam的优缺点
    mysql有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE...
    99+
    2022-12-29
    InnoDB与Myisam InnoDB与Myisam的优缺点 InnoDB与Myisam的区别
  • mysql和myisam有哪些区别
    今天小编给大家分享一下mysql和myisam有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • MySQL的存储引擎InnoDB和MyISAM
    目录1. MyISAM底层存储1.1 MyISAM底层存储(非聚集索引方式)1.2 InnoDB底层存储(聚集索引方式)2. InnoDB与MyISAM简介3. MyISAM与Inn...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作