当前位置: 首页 > 业界动态 > 技术实现 > 本文


揭秘MySQL数据库Query




发布时间: 2012-8-15 16:01:57  
    MySQL Query Optimizer是什么?

    在MySQL中有一个专门负责优化SELECT 语句的优化器模块,这就是本节将要重点分析的MySQL Query Optimizer,其主要的功能是通过计算分析系统中收集的各种统计信息,为客户端请求的 Query 给出最优的执行计划,也就是最优的数据检索方式。

    当 MySQL Query Optimizer 接收到从 Query Parser (解析器)过来的Query时,会根据 MySQL Query 语句的相应语法对该 Query 进行分解分析,同时还会做很多其他的计算转化工作,如常量转化,无效内容删除,常量计算等。所有这些工作都是为了Optimizer分析出最优的数据检索方式,也就是常说的执行计划。

 

    MySQL Query Optimizer基本工作原理

    在分析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 Tree 实现生成的详细信息比较感兴趣,可以参考Chales A. Bell的《Expert MySQL》这本书,里面有比较详细的介绍。

    MySQL Query Optimizer 并不是一个纯粹的CBO(Cost Base Optimizer),而是在CBO的基础上增加了一个被称为Heuristic Optimize(启发式优化)的功能。也就是说,MySQL Query Optimizer在优化一个Query认为的最优执行计划时,并不一定完全按照系数据库的元信息和系统统计信息,而是在此基础上增加了某些特定的规则。其实就是在CBO的实现中增加了部分RBO(Rule Base Optimizer)的功能,以确保在某些特殊场景下控制 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 实际上经过了很多复杂的运算分析,才得出最后的执行计划。对于 MySQL Query Optimizer 更多的信息,各位读者可通过 MySQL Internal 文档进行更为全面的了解。
    本文来源:51CTO

 

    相关文章推荐:MySQL数据库性能优化之缓存参数优化

分享到:
阅读:1444次
推荐阅读:

版权所有 © 2011-2016 南京云创大数据科技股份有限公司(股票代码:835305), 保留一切权利。(苏ICP备11060547号-1)  
云创大数据-领先的云存储、大数据、云计算产品供应商