当前位置: 洪哥笔记 > MySQL > MySQL查询优化器5

 

MySQL查询优化器5


关键词

MySQL查询优化器5

摘要

Mysql查询优化器的工作是为查询语句选择合适的执行路径。查询优化器的代码一般是经常变动的,这和存储引擎不太一样。因此,需要理解最新 版本的查询优化器是如何组织的,请参考相应的源代码。整体而言,优化器有很多相同性,对mysql一个版本的优化器做到整体掌握,理解起mysql新版本 以及其他数据库的优化器都是类似的。

  8 范围存取类型

  一些表达式可以使用索引,但是属于索引的范围查找。这些表达式通常对应的操作符是:>、>=、<、<=、IN、LIKE、BETWEEN。

  对优化器而言,如下表达式:

  column1 IN (1,2,3)

  该表达式与下面的表达式是等价的:

  column1 = 1 OR column1 = 2 OR column1 = 3

  并且MySQL也是认为它们是等价的,所以没必要手动将IN改成OR,或者把OR改成IN。

  优化器将会对下面的表达式使用索引范围查找:

  column1 LIKE 'x%'

  但对下面的表达式就不会使用到索引了:

  column1 LIKE '%x'

  这是因为当首字符是通配符的时候,没办法使用到索引进行范围查找。

  对优化器而言,如下表达式:

  column1 BETWEEN 5 AND 7

  该表达式与下面的表达式是等价的:

  column1 >= 5 AND column1 <= 7

  同样,MySQL也认为它们是等价的。

  如果需要检查过多的索引键值,优化器将放弃使用索引范围查找,而是使用全表扫描的方式。这样的情况经常出现如下的情况下:索引是多层次的二级索引,查询条件是'<'以及是'>'的情况。

MySQL查询优化器

  Mysql查询优化器的工作是为查询语句选择合适的执行路径。查询优化器的代码一般是经常变动的,这和存储引擎不太一样。因此,需要理解最新 版本的查询优化器是如何组织的,请参考相应的源代码。整体而言,优化器有很多相同性,对mysql一个版本的优化器做到整体掌握,理解起mysql新版本 以及其他数据库的优化器都是类似的。

  8 范围存取类型

  一些表达式可以使用索引,但是属于索引的范围查找。这些表达式通常对应的操作符是:>、>=、<、<=、IN、LIKE、BETWEEN。

  对优化器而言,如下表达式:

  column1 IN (1,2,3)

  该表达式与下面的表达式是等价的:

  column1 = 1 OR column1 = 2 OR column1 = 3

  并且MySQL也是认为它们是等价的,所以没必要手动将IN改成OR,或者把OR改成IN。

  优化器将会对下面的表达式使用索引范围查找:

  column1 LIKE 'x%'

  但对下面的表达式就不会使用到索引了:

  column1 LIKE '%x'

  这是因为当首字符是通配符的时候,没办法使用到索引进行范围查找。

  对优化器而言,如下表达式:

  column1 BETWEEN 5 AND 7

  该表达式与下面的表达式是等价的:

  column1 >= 5 AND column1 <= 7

  同样,MySQL也认为它们是等价的。

  如果需要检查过多的索引键值,优化器将放弃使用索引范围查找,而是使用全表扫描的方式。这样的情况经常出现如下的情况下:索引是多层次的二级索引,查询条件是'<'以及是'>'的情况。

  9 索引存取类型

  考虑如下的查询语句:

  SELECT column1 FROM Table1;

  如果column1是索引列,优化器更有可能选择索引全扫描,而不是采用表全扫描。这是因为该索引覆盖了我们所需要查询的列。

  再考虑如下的查询语句:

  SELECT column1,column2 FROM Table1;

  如果索引的定义如下,那么就可以使用索引全扫描:

  CREATE INDEX … ON Table1(column1,column2);

  也就是说,所有需要查询的列必须在索引中出现。

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权

本文属于“洪哥笔记”原创文章,转载请注明来源地址:MySQL查询优化器5:http://www.splaybow.com/post/mysql16154110012008.html

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« MySQL查询优化器4 MySQL查询优化器6 »