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:支持