【MySQL】如何理解三星索引

MySQL已经逐渐成为了Java程序员的面试门槛,越来越多的产品选择使用MySQL作为数据库。

三星索引系统的概念是 在《Rrelational Database Index Design and the optimizers》 一书中提出来的。原文如下:

The index earns one star if it places relevant rows adjacent to each other, a second star if its rows are sorted in the order the query needs, and a final star if it contains all the columns needed for the query.

翻译如下:

如果索引将相关行彼此相邻放置,则将获得一颗星,

如果它的行按查询需要的顺序排序,则为第二个星号,

如果包含查询所需的所有列,则为最后一个星号。

 

个人疑问:每颗星星是否相互独立,如果不满足第一颗星,但却满足第二颗星是否能成为1星呢?

 

个人理解:

针对第1颗星,也就是第2句话:

在Where条件中往往有很多的筛选条件,所以有时我们会为某表建立“联合索引”,当把Where后的等值条件列作为索引最开头的列,此时后面的索引扫描的范围就变小了,所以可以得到该星。

针对第2颗星,也就是第2句话:

对于存在排序性操作的,例如group by,order by等,如果将指定的排序字段也加入到索引,则可以得到该星。

针对第3颗星,也就是第3句话:

select查询出的所有字段,均包含在索引中的,则可以得到该星。(因为这样就不会再回去查找那些不在索引中的字段了。

posted @ 2021-03-23 21:47  浙江棋棋  阅读(168)  评论(0编辑  收藏  举报