什么是索引覆盖
MySQL官网,类似的说法出现在explain查询计划优化章节,即explain的输出结果Extra字段为Using index时,能够触发索引覆盖。覆盖索引即需要查询的字段正好是索引的字段,那么直接根据该索引,就可以查到数据了,而无需回表查询。
如何实现索引覆盖?
常见的方法是:将被查询的字段,建立到联合索引里去。
能够命中name索引,索引叶子节点存储了主键id,通过name的索引树即可获取id和name,无需回表,符合索引覆盖,效率较高。
第二个SQL语句:
能够命中name索引,索引叶子节点存储了主键id,但sex字段必须回表查询才能获取到,不符合索引覆盖,需要再次通过id值扫码聚集索引获取sex字段,效率会降低。Extra:Using index condition表示使用的索引方式为二级检索,即进行了回表查询。可想而知,还是会有一定的性能消耗的
回表优化
如果把(name)单列索引升级为联合索引(name, sex)就不同了。