MySQL索引的三星评估(three-star system)

£可爱£侵袭症+ 提交于 2019-12-07 03:19:19

在《高性能MySQL》中文第三版提到了索引的评估:三星评估(three-star system)。

在《High Performance MySQL (3rd Edition)》英文第三版的原文是:

Lahdenmaki and Leach’s book also introduces a three-star system for grading how suitable an index is for a query.
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.

这段话理解起来很费解,第三版的中文翻译也不好理解:

索引将相关的记录放到一起获得一星;

如果索引中的数据顺序和查找中的排列顺序一致获得两星;

如果索引中的列包含了查询中需要的全部列则获得三星;

个人表示中文和英文都很理解(难道语文和英语都是数学老师教的,^...^)。

我对此提出了深深的疑问:

一星:相关的记录指的是什么??(相关这个词很深奥,“相关部门”是什么部门)

二星:如果建立了B-Tree(B+Tree)索引,数据就有序了。
三星:索引的列包含了查询需要所有的列?根本不需要在where查询条件所有的列上建立索引!

我认为一星和二星的rows应该是columns,索引不关具体的数据行,只与查询的列有关。这样也与High Performance MySQL 后面提到的多列索引的观点相符合,特别是二星评估。

个人的观点:

评估一个索引是否适合某个查询的“三星系统”(three-start system):
一星:索引将相关的列放到一起,即在一系必要的列上建立索引,不必为在where条件里面的列都建立索引。 
二星:索引中的数据列顺序和查找中排列顺序一致。通常将选择性最高的列放到索引的最前列。
三星:索引中的列包含了查询中需要的全部列。索引包含查询所需要的数据列,不再进行全表查表(聚簇索引、覆盖索引)。

 

参考资料:

《高性能MySQL》中文第三版

《High Performance MySQL (3rd Edition)》英文第三版


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!