码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-06-01 13:25:58      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

在《高性能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)》英文第三版


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

标签:

原文地址:http://my.oschina.net/BearCatYN/blog/423276

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!