暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL存储引擎MyISAM和InnoDB的区别

毫末之木 2020-12-30
365

MyISAM存储引擎是mysql5.5版本之前的默认存储引擎。虽性能极佳,但有一个明显的缺点:不支持事务。InnoDB存储引擎是mysql后续版本推出的存储引擎,其最大特色就是支持事务。

比较MyISAM和InnoDB的区别:

1、存储结构

MyISAM每张表存放在三个文件:frm-表定义文件、.MYD
(MYData)-数据文件、.MYI
(MYIndex)-索引文件

InnoDB引擎:所有的表及索引等都保存在一个数据文件中.ibd
(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB

2、存储空间

MyISAM可以被压缩,存储空间比较小。

InnoDB的表占用空间更大,因该引擎会在主内存中建立缓冲池用于缓存数据和索引。

3、可移植性、备份和恢复

MyISAM数据以文件形式存储,跨平台数据转移更方便。可以针对单个表备份和恢复操作。

InnoDB可以拷贝数据文件、备份binlog、或使用mysqldump。在大数据量时(几十G)更困难。

4、对事务的支持

MyISAM不支持事务和MVCC

InnoDB支持事务和MVCC(并发控制协议)

5、外键

MyISAM不支持、InnoDB支持

6、对锁的支持

MyISAM是表级锁

InnoDB支持表级锁、行级锁,其并发能力更强

7、记录的存储顺序

MyISAM按插入顺序保存

InnoDB按主键大小有序插入

8、select操作

MyISAM更快

9、增删改操作

InnoDB更快

10、select count(*)

myisam更快,因为myisam内部维护了一个计数器,可以直接调取。

11、索引的实现方式

myisam:B+树索引,myisam 是堆表

InnoDB:B+树索引,Innodb 是索引组织表

12、全文索引

MyISAM:支持FULLTEXT类型的全文索引

InnoDB:不支持FULLTEXT类型的全文索引,版本5.6以上支持。但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好

13、主键

MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址

InnoDB如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值

14、哈希索引  

MyISAM:不支持  

InnoDB:支持


文章转载自毫末之木,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论