Innodb索引

索引分类

聚集索引

  • 是按照主键构建的B+树,叶子节点存放整张表的行记录,称为数据页
  • 每张表只能有一个
  • 聚集索引逻辑上连续,物理上不一定连续:
    • 数据页通过双向链表链接,按照主键排序。
    • 数据页中的记录通过双向链表维护,物理上不一定按照主键的顺序。

辅助索引

  • 可以有多个。
  • 叶子节点包含索引键值和指向行数据的书签。

适用条件

  • 高选择性(字段取值范围很广,几乎不重复)字段适合建立B+树索引。
    • Show Index 结果中的 Cardinality表示表中不重复的列的预估值,和总行数的比值接近于1,即为高选择性。

索引特征

联合索引

  • 对表上多个列进行索引,键值数量>=2(普通索引为1),是B+树。
  • 叶子节点上的键值对是逻辑有序的。
  • 对于联合索引(a,b,c),应按照abc的顺序使用,如a,ab,abc。

覆盖索引

  • 从辅助索引的键值中能查到需要的记录,无需再回表查聚集索引。
  • 参考

不使用索引

  • 需要访问的数据占比较大(20%左右),优化器会走聚集索引。如果走辅助索引,回表查询的时候是随机读,远慢于顺序读

ICP优化

  • Index Condition Pushdown, 取出索引的同时考虑进行where过滤。
  • 过滤放在存储引擎层,减少sql层拉取的数据
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章