MySQL 中 MyISAM 与 InnoDB 的区别
对比项 | MyISAM | InnoDB |
---|---|---|
默认引擎 | 5.5之前 | 5.5之后 |
主要特点 | 适合查询和插入,速度快,省资源,适合简单业务 | 适合修改,速度慢,费资源,适合高并发业务 |
事务 | 不支持 | 支持(所以可以回滚和修复,更安全) |
外键 | 不支持 | 支持 |
MVCC | 不支持 | 支持 |
全文索引 | 支持 | 5.5以后支持 |
行锁与行锁 | 只有表锁,操作一行就锁整个表,所以不适合高并发 | 表锁行锁都有,操作一行锁一行,所以适合高并发 |
缓存 | 只缓存索引,不缓存数据 | 索引数据一起缓存 |
主键 | 表可以没有主键和索引 | 没有主键会自动生成主键(体现在行格式的第一个隐藏字段) |
存储结构 | .frm文件:表的结构信息 .myd文件:表的数据 .myi文件:表的索引 | .frm:表的结构信息。 .ibd:文件:表的数据(即索引),独占表空间时,每个表一个.ibd文件 .ibdata文件:表的数据(即索引),共享表空间时,所有表共用一个.ibdata文件 |
索引 | B+ 树,叶节点只存数据文件的地址(主键索引和二级索引都是),所以找到了目标地址还要再I/O一次,比InnoDB的主键索引慢,但比InnoDB的二级索引快(因为按地址找比回表快) | B+ 树,主键叶节点直接存数据文件,二级索引叶节点存主键值 |