MySQL三星索引

主要内容来自三星索引

★☆☆

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

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

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

★★☆

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

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

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

★★★

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

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

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


评估一个索引是否适合某个查询的“三星系统”(three-start system):

  • 一星:索引将相关的列放到一起,即在一系必要的列上建立索引,不必为在where条件里面的列都建立索引。
  • 二星:索引中的数据列顺序和查找中排列顺序一致。通常将选择性最高的列放到索引的最前列。
  • 三星:索引中的列包含了查询中需要的全部列。索引包含查询所需要的数据列,不再进行全表查表,回表聚集索引(聚簇索引、覆盖索引)。

http://www.notedeep.com/page/464

http://blog.itpub.net/29701030/viewspace-2646874/

文章目录