什么是三星索引?

三星索引其实是衡量一个索引是否达到最佳表现的三个维度

第一星:where后面的等值谓词,可以匹配索引列的顺序:意义在于谓索匹配的越多,索引片越窄,最终扫描的数据行也是越小。

第二星:order by的排序是否和索引的顺序一致:意义在于避免进行额外的排序,增加消耗。

第三星:select的字段是否都为索引列:意义在于避免每一个索引行查询,都需要去聚簇索引进行一次随机IO查询。

三星索引还有如下解释,其实是差不多的---

三星索引,顾名思义,是满足了三个星级的索引。那么,这个三个星级是如何给定的呢?

★☆☆

定义:如果与一个查询相关的索引行是相邻的,或者至少相距足够靠近的话,那这个索引就可以标记上一颗星。

收益:它最小化了必须扫描的索引片的宽度。

实现:把 WHERE 后的等值条件列作为索引最开头的列,如此,必须扫描的索引片宽度就会缩至最短。

★★☆

定义:如果索引行的顺序与查询语句的需求一致,则索引可以标记上第二颗星。

收益:它排除了排序操作。

实现:将 ORDER BY 列加入到索引中,保持列的顺序

★★★

定义:如果索引行中包含查询语句中的所有列,那么这个索引就可以标记上第三颗星。

收益:这避免了访问表的操作(避免了回表操作),只访问索引就可以满足了。

实现:将查询语句中剩余的列都加入到索引中。

posted @ 2022-06-09 14:50  Chen洋  阅读(1115)  评论(0编辑  收藏  举报