1. 索引结构
InnoDB 和 MyISAM 都使用 B+ 树作为索引结构,区别在于叶子节点:
- MyISAM 的叶子节点存储的是数据记录所在的地址,MyISAM 存储数据有索引文件及数据文件,先在索引文件内找到数据的地址,称为非聚集索引,再到数据文件内找到具体的文件记录
- InnoDB索引文件就是数据文件,主索引树的叶子节点存储的是行数据的数据页,页内存储了完整的行数据记录,称为聚集索引,辅助索引树叶子节点存储主键值
2. 事务、锁处理及外键支持的区别
InnoDB | MyISAM | |
---|---|---|
事务处理 | 事务安全 | 非事务安全 |
锁级别 | 行锁和表锁 | 表锁 |
外键支持 | 支持 | 不支持 |
3. 查询效率
InnoDB | MyISAM |
---|---|
慢 | 快 |
原因:
- InnoDB要加载数据页到缓存内,MyISAM只缓存索引块,MyISAM较少的磁盘io
- InnoDB映射到数据页、到行,MyISAM记录文件的offset,定位比InnoDB快
- InnoDB需要维护版本并发控制
4. 适用场景
InnoDB | MyISAM |
---|---|
多读多写 | 多读少写 |
有事务 | 无事务 |
高并发 | 非高并发 |