介绍MySQL Query Optimizer基本工作原理

时间:2021-04-16

  在分析MySQL Query Optimizer的工作原理之前,先了解一下MySQL的Query Tree。MySQL的Query Tree是通过优化实现DBXP的经典数据结构和Tree构造器而生成的,是指导完成一个Query语句的请求需要处理的工作步骤,我们可以简单地认为就是一个数据处理流程,只是以Tree的数据结构存放而已。通过Query Tree可以很清楚地知道一个Query的完成需要经过哪些步骤,每一步的数据来源在哪里,处理方式是怎样的。在整个DBXP的Query Tree生成过程中,MySQL使用了LEX和YACC这两个功能非常强大的语法分析工具。MySQL Query Optimizer的所有工作都是基于这个Query Tree进行的。

  MySQL Query Optimizer并不是一个纯粹的CBO,而是在CBO的基础上增加了一个被称为heuristic optimize的功能。也就是说MySQL Query Optimizer在优化一个Query认为的最优执行计划时,并不一定完全按照数据库的元信息和系统统计信息,而是在此基础上增加了某些特定的规则。其实就是在CBO的实现中增加了部分RBO的功能,以确保在某些特殊场景下控制Query按照预定的方式生成执行计划。

  当客户端向MySQL请求一条Query,命令解析器模块完成请求分类,区别出是SELECT并转发给MySQL Query Optimizer时,MySQL Query Optimizer首先会对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值。并对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。然后分析Query中的hint信息(如果有),看现实hint信息是否可以完全确定该Query的执行计划。如果没有hint或hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行写相应的计算分析,然后再得出最后的执行计划。

  Query Optimizer是一个数据库软件非常核心的功能,虽然说起来只是简单的几句话,但在MySQL内部,MySQL Query Optimizer实际上经过了很多复杂的运算分析,才得出最后的执行计划。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章