【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查询出的所有字段,均包含在索引中的,则可以得到该星。(因为这样就不会再回去查找那些不在索引中的字段了。)