MySQL 覆盖索引

2016-09-14 16:00:23   数据库

  mysql  

声明

文章内容出自《高性能Mysql第三版》

覆盖索引的好处

  • 索引的条目通常比数据行小,所以如果只需要读取索引,那么MySQL就会极大的减少数据的访问量

  • 因为索引是按照列值顺序存储的,所以对于I/O密集型的范围查询会比从磁盘读取每一行数据的I/O要少很多。

  • 一些存储引擎如MYISAM在内存中缓存索引,数据则依赖于操作系统的缓存,因此要访问的数据需要一次系统调用

  • 由于innodb的聚簇索引,覆盖索引对于InnoDB表特别有用,InnoDB的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询

不是所有的所有都可以成为覆盖索引。覆盖索引必须要存储索引列的值,所以MySQL只能使用b-tree索引做覆盖索引。

当一个使用了覆盖索引查询时,在explain中的extra列可以看到’using index‘的信息。 如:index1(a,b); select a,b from table 此时查询就能使用覆盖索引