特点 | MyISAM | InnoDB |
存储限制 | 有 | 64TB |
事务安全 | 支持 | |
锁机制 | 表锁 | 行锁 |
B树索引 | 支持 | 支持 |
哈希索引 | ||
全文索引 | 支持 | |
集群索引 | 支持 | |
数据缓存 | 支持 | |
索引缓存 | 支持 | 支持 |
空间使用 | 低 | 高 |
内存使用 | 低 | 高 |
批量插入速度 | 高 | 低 |
支持外键 | 支持 | |
数据可压缩 | 支持 |
对于自动增长列,innodb可以手动插入,插入为空或0,则实际插入的值将为自动增长的值。
MyISAM不支持事务和外键,innodb支持事务和外键。
相对于mysiam,innodb写的效率更低,并且会占用更多的磁盘空间保存数据和索引。
对于innodb,自动增长列必须为索引,如果是组合索引,则必须是组合索引的第一列,但myisam没有要求,如果使用MyISAM,将自动增长列作为索引的第二列或者第三列,那么会先将数据按照第一和第二列排序后再自增。比如插入(2,2)(3,3)(2,2)则第一个(2,2)的自动增长列为1,第二个为2,(3,3)的自动增长列为1.
select count(*)from table,MyISAM直接读取值,因为存储了记录数,而innodb必须遍历全表。
使用场景:MyISAM适用于select、insert较多的场景。InnoDB适用于大数据量系统,支持事务操作,可以提交、回滚、错误恢复。