索引覆盖
只需要在一棵索引树上就能获取sql所需的所有列数据,无需回表,速度更快。
例如:select id,age from user where age = 10;
使用id,age,name查询:
select id,age,name, salary from user where age = 10;
explain分析:age是普通索引,但name列不在索引树上,所以通过age索引在查询到id和age的值后,需要进行回表再查询name的值。此时的extra列的using where表示进行了回表查询
type: all, 表示全表扫描
增加表的联合索引:create index idx_user_name_age_salary on mydb.user (name, age, salary);
explain分析:此时字段age和name是组合索引idx_age_name,查询的字段id、age、name的值刚刚都在索引树上,只需扫描一次组合索引b+树即可,这就是实现了索引覆盖,此时的extra字段为using index表示使用了索引覆盖。