MYSQL索引-覆盖索引
一、覆盖索引
覆盖索引又可以称为索引覆盖,即select的数据列只从索引中就能得到,不必读取数据行,也就是只 需扫描索引就可以得到查询结果。
说明:
-
使用覆盖索引,只需要从索引中就能检索到需要的数据,而不要再扫描数据表(索引为select 列)
-
索引的体量往往要比数据表小很多,因此只读取索引速度会非常快,也会极大减少数据访问量;
-
MySQL的查询优化器会在执行查询前判断,是否有一个索引可以覆盖所有的查询列;
-
并非所有类型的索引都可以作为覆盖索引,覆盖索引必须要存储索引列的值。像哈希索引、空间索引、全 文索引等并不会真正存储索引列的值
判断是否使用了覆盖索引:
当一个查询使用了覆盖索引,在查询分析器EXPLAIN的Extra列可以看到“Using index” 。
二、实例
show INDEX from employee;(有四个索引id,name,salary,dept ,后3个为复合索引)
explain select * from employee where id=13;
触发覆盖索引:
explain select id from employee where id=13;
explain select name,salary from employee;
可以看到覆盖索引,即select 后面的列的值,都在索引中。
索引可以提升执行的效率和节省时间,但是我们同样可以看到,在使用覆盖索引的时候,不适用于需要查询多个列数据的场景;在查询列较少的情况下,使用覆盖索引可以明显提升