文章内容出自《高性能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
此时查询就能使用覆盖索引