欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

高性能索引策略二

程序员文章站 2022-05-02 13:53:14
多列索引 一个误区:一个常见的错误就是,为每个列创建独立的索引,或者按照错误的顺序创建多了索引。 1. 为什么要建立多了索引 在每个列创建独立索引一般是由于听到诸如“吧where条件里面的列都建立上索引”这样模糊的建议导致的,实际上这个建议的非常错误的,在多个列上简历独立的单列索引大部分情况下并不能 ......

多列索引

一个误区:一个常见的错误就是,为每个列创建独立的索引,或者按照错误的顺序创建多了索引。

1. 为什么要建立多了索引

  在每个列创建独立索引一般是由于听到诸如“吧where条件里面的列都建立上索引”这样模糊的建议导致的,实际上这个建议的非常错误的,在多个列上简历独立的单列索引大部分情况下并不能提高mysql的查询性能。

  索引合并策略:

  mysql5.0和更新版本引入了一种叫“做阴合并”的策略,一定程度上可以使用表上的多个单列索引来定位指定的行,更早版本的mysql只能使用其中某一个单列索引,然而这种情况下没有哪一个独立的单列索引是非常有有效的,例如在file_id和actor_id上各有一个单列索引。但对于下面的这个查询where条件,这俩个单列索引都不试最好的选择;

  mysql>select file_id,actor_id form file_actor where file_id = 1 or actor_id = 1;

  在老的mysql版本中,mysql会对这个查询使用权标扫描,但在mysql5.0和更新版本中,查询能够同时使用这俩个单列索引进行扫描,并将结果合并,这种算法有三个变种:or条件的联合(union),and条件的相交(intersection),组合前俩种情况下的联合和相交。

  什么时候使用多了索引

  当服务器对多个索引做相交操作时(通常有多个and条件)

  当服务器对多个索引做联合操作时(通常有多个or条件)

 

2.选择合适的索引列顺序

  在一个b-tree索引中,索引列的顺序意味着索引首先按照最左列进行排序(最左原则),其次是第二列,等等。(顺便说明本篇文章内容使用于b-tree索引,哈希索引或者其他类型索引并不会想b-tree索引一样按照顺序存储数据)

  对于如何选择索引列顺序有一个检验法则:将选择性最高的列放在做索引的最前列。