两种存储引擎
- MyISAM
不支持事务,支持表锁和全文索引,查找效率极高,适合读多写少。 - InnoDB
支持事务,行锁,查询性能相对低,适合写多读少。
索引分类
- Hash
- B-tree (基于平衡树)
聚集索引和非聚集索引
- 非聚集索引
类似书的目录 - 聚集索引
类似书的页码数字
MyISAM 的 B-tree (非聚集索引)
- 规定:左边放小的,右边放大的
- 索引保存的数据:
- 索引列的值
- 指向数据行的指针
物理文件:
- MYI:存储索引
- MYD:存储数据
- FRM:表结构定义等
InnoDB 的 B-tree (聚集索引)
InnoDB 中只有一个聚集索引
- 默认会用主键id作为聚集索引
- 如果没有主键,会取非空的唯一索引作为聚集索引
- 如果上面都没有,InnoDB 会维护一个唯一id来作为聚集索引
物理文件:
- IBD:既存索引又存数据。
索引优缺点
- 优点:
- 提高检索速度,降低磁盘 IO
- 缺点:
- 索引也需要存储空间:索引实际就是一张表
- 字段更新(INSERT, DELETE, UPDATE)会有性能损耗
适合:
- 频繁作为 where 条件的字段
- 关联字段可以建索引,例如外键
- order by,group by 的 column 可以建索引
不适合:
- where 条件中用不到的字段
- 频繁更新的字段
- 数据值分布比较均匀的
- 数据量少的