什么是三星索引?
三星索引其实是衡量一个索引是否达到最佳表现的三个维度:
第一星:where后面的等值谓词,可以匹配索引列的顺序:意义在于谓索匹配的越多,索引片越窄,最终扫描的数据行也是越小。
第二星:order by的排序是否和索引的顺序一致:意义在于避免进行额外的排序,增加消耗。
第三星:select的字段是否都为索引列:意义在于避免每一个索引行查询,都需要去聚簇索引进行一次随机IO查询。
三星索引还有如下解释,其实是差不多的---
三星索引,顾名思义,是满足了三个星级的索引。那么,这个三个星级是如何给定的呢?
★☆☆
定义:如果与一个查询相关的索引行是相邻的,或者至少相距足够靠近的话,那这个索引就可以标记上一颗星。
收益:它最小化了必须扫描的索引片的宽度。
实现:把 WHERE 后的等值条件列作为索引最开头的列,如此,必须扫描的索引片宽度就会缩至最短。
★★☆
定义:如果索引行的顺序与查询语句的需求一致,则索引可以标记上第二颗星。
收益:它排除了排序操作。
实现:将 ORDER BY 列加入到索引中,保持列的顺序
★★★
定义:如果索引行中包含查询语句中的所有列,那么这个索引就可以标记上第三颗星。
收益:这避免了访问表的操作(避免了回表操作),只访问索引就可以满足了。
实现:将查询语句中剩余的列都加入到索引中。