快速业务通道

MySQL Internals Optimizer

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
; /* of all possible query plans where the user    */
           /* controls the exhaustiveness of the search.   */
           greedy_search()
             best_extension_by_limited_search()
               best_access_path()
           /* Perform an exhaustive search for an optimal plan */
           find_best()
       make_join_select()        /* ... to here */
     JOIN::exec()
 缩进行显示了哪个函数调用哪个函数,如handle_select()函数调用mysql_select()函数,mysql_select()函数会调用JOIN::prepare()、JOIN::optimize()、JOIN::exec(),以及类推。mysql_select()函数的第一部分是调用JOIN::prepare(),此函数用来上下文分析、元数据建立和一些语句转化。查询优化器函数JOIN::optimize()和其所有优化处理中的子路线。当执行完JOIN::optimize()函数后,JOIN::exec()接管并完成JOIN::optimize()函数优化决断后的执行工作。

 虽然有JOIN字出现,其实查询优化器的工作会处理所有的查询类型,不单单JOIN联接查询。

 

二。首要优化


 这部分讨论服务器执行的最重要优化。

 


1.优化常数关系

常数等值传递


 如下的表达式会发生语句转化:

WHERE column1 = column2 AND column2 = ''x''
 这种表达式,众所周知,如果A=B && B=C => A=C(可等值传递),上句表达式转化后变成:


WHERE column1=''x'' AND column2=''x''

 

 当且仅当,操作符为如下的任何一个,在column1 <操作符> column2条件中就会发生语句转化:

=, <, >, <=, >=, <>, <=>, LIKE
注意:等值传递的转化,不适合于BETWEEN。可能也不适合于LIKE,这是后话。


 

 常数等值传递同样发生在循环中,前一步传递的输出作为后一步传递的输入。


源代码见/sql/sql_select.cc,change_cond_ref_to_const(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号