聚簇索引:
- 底层叶子节点存储的是整行数据。
- 通常是主键id,也是主键推荐设置为自增的原因,尽量少的设计到B+Tree的自平衡。
- 如果没有定义主键,InnoDB会选择一个唯一的非空索引代替;
- 如果没有这样的索引,InnoDB会隐式定义一个主键来作为局促索引;
非聚簇索引:
- 也被称为二级索引,底层叶子节点存储的是主键id。
- 通常使用非聚簇索引查询会涉及到回表查询。
覆盖索引的好处:
- 使用覆盖索引扫描的查询可以直接使用叶节点的主键值,而不会设计到回表查询。
什么是回表:
如果通过非聚簇索引查询数据的话,基本上都会涉及到回表查询,因为叶子节点只存储id,拿到对应的id再进行聚簇索引的查询。
优化思路:
查询是尽量使用索引查询,可以使用覆盖索引,尽量不要使用回表查询。
排序是尽量使用索引排序。