有色心没色胆_MySQL查询优化器浅析(二)_MySQL

作者: seo 分类: seo基础 发布时间: 2019-07-04 15:11

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

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

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

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

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

  2) 否则,如果其中一个列拥有更好的存取类型(比如,一个具有索引,另外一个没有索引;再或者,一个是唯一索引,另外一个是非唯一索引),那么使用该列作为驱动表达式。

  3) 否则,如果两个列都分别拥有索引,并且两个条件对应的存取类型是一致的,那么选择定义索引时的先定义的索引。

  如果两个条件里面设计的列是同一列,那么又是另外一种情况,考虑如下的查询语句:

  如果column1与column2都是拥有索引的,每个查询都是使用索引查询,然后合并结果集。

  然而,MySQL不会进行这样的转换。如果你觉得使用范围查找会更好一些,应该手动地进行转换。

  一般而言,ORDER BY的作用是使结果集按照一定的顺序排序,如果可以不经过此操作就能产生顺序的结果,可以跳过该ORDER BY操作。

  优化器将去除该ORDER BY子句,因为此处的ORDER BY子句没有意义。

  在这种情况下,如果column1类上存在索引,优化器将使用该索引进行全扫描,这样产生的结果集是有序的,从而不需要进行ORDER BY操作。

  假设column1上存在索引,我们也许会觉得优化器会对column1索引进行全扫描,并且不进行ORDER BY操作。实际上,情况并不是这样,优化器是使用column1列上的索引进行全扫表,仅仅是因为索引全扫描的效率高于表全扫描。对于索引全扫描的结果集仍然进行ORDER BY排序操作。

  2) 如果没有索引,优化器将需要进行排序,一般情况下会使用HASH表的方法。

  如果column1列上存在索引,优化器使用a进行索引定位,然后返回前一条记录。

  ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

  江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用为...

  《创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 每...

  本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

  所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

  PHP中文网:独家原创,永久免费的在线php视频教程,php技术学习阵地!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!