通常我们都会根据查询的WHERE条件来创建合适的索引,但是MYSQL也可以使用索引来直接获取数据而不用再去查表,如果一个索引包括所有需要查询的字段的值,我们称之为“覆盖索引”。


覆盖索引是一个非常好的工具,能极大的提高性能:

由于索引条目远远小于数据行大小,所以如果只需要读取索引,那MYSQL可以减少访问量,这对缓存的负载非常重要。

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


不是所有的类型的索引都可以成为覆盖索引,覆盖索引必须要存储索引列的值,而哈希索引、空间索引、全文索引等不存储索引列的值,所以MYSQL只能使用B-TREE索引做覆盖索引。

当发起一个索引覆盖的查询,在EXPLAIN的Extra列可以看到“Using index”的信息。