MySQL数据库Query的优化.docx

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MySQL数据库Query的优化

MySQL 数据库Query 的优化 MySQL的Query Opt imi zer MySQL Query Optimizer是什么? 在MySQL 中有一个专门负责优化SELECT 语句的优化器模块,我们将要重点分析的MySQL Optimizer,其主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的Query 给出他认为最优的执行计划,也就是他认为最优的数据检索方式。 当MySQL Optimizer 接收到从Query Parser (解析器)送过来的Query 之后,会根据MySQL Query 语句的相应语法对该Query 进行分解分析的同时,还会做很多其他的计算转化工作。如常量转化,无效内容删除,常量计算等等。所有这些工作都只为了Optimizer 工作的唯一目的,分析出最优的数据检索方式,也就是我们常说的执行计划。 MySQL Query Optimizer基本工作原理 在分析MySQL 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 并转发给Query Optimizer 之后,Query Optimizer 首先会对整条Query 进行,优化处理掉一些常量表达式的预算,直接换算成常量值。并对Query 中的查询条件进行简化和转换,如去掉一些无用或者显而易见的条件,结构调整等等。然后则是分析Query 中的Hint 信息(如果有),看显示Hint 信息是否可以完全确定该Query 的执行计划。如果没有Hint 或者Hint 信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query 进行写相应的计算分析,然后再得出最后的执行计划。 Query Optimizer 是一个数据库软件非常核心的功能,虽然在这里说起来只是简单的几句话,但是在MySQL 内部,Query Optimizer 实际上是经过了很多复杂的运算分析,才得出最后的执行计划。对于MySQL Query Optimizer 更多的信息,可以通过MySQL Internal 文档进行更为全面的了解。 Query语句优化基本思路和原则 在分析如何优化MySQL Query 之前,我们需要先了解一下Query 语句优化的基本思路和原则。一般来说,Query 语句的优化思路和原则主要提现在以下几个方面: 1. 优化更需要优化的Query; 2. 定位优化对象的性能瓶颈; 3. 明确的优化目标; 4. 从Explain 入手; 5. 多使用profile 6. 永远用小结果集驱动大的结果集; 7. 尽可能在索引中完成排序; 8. 只取出自己需要的Columns; 9. 仅仅使用最有效的过滤条件; 10. 尽可能避免复杂的Join 和子查询; 上面所列的几点信息,前面4 点可以理解为Query 优化的一个基本思路,后面部分则是我们优化中的基本原则。 下面我们先针对Query 优化的基本思路做一些简单的分析,理解为什么我们的Query 优化到底该如何进行。 优化

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档