覆盖索引

Posted heapStark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了覆盖索引相关的知识,希望对你有一定的参考价值。

参考:http://blog.csdn.net/garfielder007/article/details/54295577

聚集索引和辅助索引

  • 聚集索引(主键索引)
—innodb存储引擎是索引组织表,即表中的数据按照主键顺序存放。而聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据聚集索引的叶子节点称为数据页,数据页,数据页!重要的事说三遍。聚集索引的这个特性决定了索引组织表中的数据也是索引的一部分。
  • 辅助索引(二级索引)
—非主键索引
—叶子节点=键值+书签。Innodb存储引擎的书签就是相应行数据的主键索引值
 
辅助索引检索数据图示如下
由于检索数据时,总是先获取到书签值(主键值),再返回查询,因此辅助索引也被称之为二级索引
 

什么是覆盖索引

  覆盖索引(covering index)指一个查询语句的执行只需要从辅助索引中就可以得到查询记录,而不需要查询聚集索引中的记录。也可以称之为实现了索引覆盖。
  那么,优点显而易见。辅助索引不包含一整行的记录,因此可以大大减少IO操作。覆盖索引是mysql dba常用的一种SQL优化手段
 

覆盖索引的优点:

(1)索引条目通常远小于数据行大小,如果只读取索引,MySQL就会极大地减少数据访问量。

(2)索引按照列值顺序存储,对于I/O密集的范围查询会比随机从磁盘中读取每一行数据的I/O要少很多。

(3)InnoDB的辅助索引(亦称二级索引)在叶子节点中保存了行的主键值,如果二级索引能够覆盖查询,则可不必对主键索引进行二次查询了。

    覆盖索引就是从索引中直接获取查询结果,要使用覆盖索引需要注意select查询列中包含在索引列中;where条件包含索引列或者复合索引的前导列;查询结果的字段长度尽可能少。

以上是关于覆盖索引的主要内容,如果未能解决你的问题,请参考以下文章

mysql覆盖索引和联合索引的区别

「Mysql索引原理(七)」覆盖索引

回表,索引覆盖,最左匹配

mysql-覆盖索引

mysql覆盖索引详解——like模糊全匹配中使用索引

mysql 14 覆盖索引+回表