索引分类
聚集索引
- 是按照主键构建的B+树,叶子节点存放整张表的行记录,称为数据页。
- 每张表只能有一个。
- 聚集索引逻辑上连续,物理上不一定连续:
- 数据页通过双向链表链接,按照主键排序。
- 数据页中的记录通过双向链表维护,物理上不一定按照主键的顺序。
辅助索引
- 可以有多个。
- 叶子节点包含索引键值和指向行数据的书签。
适用条件
- 高选择性(字段取值范围很广,几乎不重复)字段适合建立B+树索引。
- Show Index 结果中的 Cardinality表示表中不重复的列的预估值,和总行数的比值接近于1,即为高选择性。
索引特征
联合索引
- 对表上多个列进行索引,键值数量>=2(普通索引为1),是B+树。
- 叶子节点上的键值对是逻辑有序的。
- 对于联合索引(a,b,c),应按照abc的顺序使用,如a,ab,abc。
覆盖索引
- 从辅助索引的键值中能查到需要的记录,无需再回表查聚集索引。
- 参考。
不使用索引
- 需要访问的数据占比较大(20%左右),优化器会走聚集索引。如果走辅助索引,回表查询的时候是随机读,远慢于顺序读。
ICP优化
- Index Condition Pushdown, 取出索引的同时考虑进行where过滤。
- 过滤放在存储引擎层,减少sql层拉取的数据