mysql查询优化器浅析--

mysql查询优化器浅析--

ID:9509424

大小:69.00 KB

页数:9页

时间:2018-05-01

mysql查询优化器浅析--_第1页
mysql查询优化器浅析--_第2页
mysql查询优化器浅析--_第3页
mysql查询优化器浅析--_第4页
mysql查询优化器浅析--_第5页
资源描述:

《mysql查询优化器浅析--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、MySQL查询优化器浅析>>  1定义  Mysql查询优化器的工作是为查询语句选择合适的执行路径。查询优化器的代码一般是经常变动的,这和存储引擎不太一样。因此,需要理解最新版本的查询优化器是如何组织的,请参考相应的源代码。整体而言,优化器有很多相同性,对mysql一个版本的优化器做到整体掌握,理解起mysql新版本以及其他数据库的优化器都是类似的。  优化器会对查询语句进行转化,转化等价的查询语句。举个例子,优化器会将下面语句进行转化:  SELECTysql_select()  JOIN::prepare()   setu

2、p_fields()  JOIN::optimize()      /*optimizerisfromhere...*/   optimize_cond()   opt_sum_query()   make_join_statistics()    get_quick_record_count()    choose_plan()     /*Findthebestize_straight_join()      best_access_path()     /*Finda(sub-)optimalplanamongallor

3、subset*/     /*ofallpossiblequeryplansited_search()       best_access_path()     /*Performanexhaustivesearchforanoptimalplan*/     find_best()   make_join_select()    /*...tohere*/  JOIN::exec()  上面的缩进表示函数的相互调用关系,因此可以看出handle_select()调用函数mysql_select(),mysql_select(

4、)调用JOIN::prepare(),等等。  mysql_select()首先调用函数JOIN::prepare()进行语句分析、元数据设置、子查询转化等等。然后调用函数JOIN::optimize()进行优化,选出最后的执行计划。最后调用函数JOIN::exec()执行该执行计划。  尽管出现了单词JOIN,这些优化函数是为所有的查询语句服务的,不管你是什么查询类型。  函数optimize_cond()和函数opt_sum_query()是执行一些转化操作。函数make_join_statistics()对所有可用索引统

5、计信息进行分析。  3常量转化  对类似下面的表达式可以进行转化:  n1=column2ANDcolumn2='x';  因为我们知道:如果A=BandB=C,那么A=C。所以上面的表达式可以转化为:  n1='x'ANDcolumn2='x';  对于column1column2,只要是属于下面的操作符之一就可以进行类似的转化:  =,<,>,<=,>=,<>,<=>,LIKE  从中我们也可以看出,对于BETn1='y

6、'  因为第一个条件是始终为true的,所以可以移除该条件,变为:  n1='y'  再见如下表达式:  nISNULL  该条件是始终为false的,再看:  nISNOTNULL  该条件是始终为true的,因此这样的表达式也是可以从条件表达式中删除的。  当然,也是有特殊情况的,1234下一页>>>>这篇文章来自..,。比如在outjoin中,被定义为NOTNULL的列也可能包含NULL值。在这种情况下,ISNULL条件是被保留的。  当然优化器没有对所有的情况进行检测,因为这实在太复杂了。举个例

7、子:  CREATETABLETable1(column1CHAR(1));    SELECT*FROMTable1ARYKEY(column1,column2)  再看下面的语法:  FROMTable0Table1...ySQL会预先评估常量表,找出这个值,然后将这个值引入到查询语句中进行优化,举例如下:  SELECTTable1.unique_not_null_column,Table2.any_column  FROMTable1,Table2  ySQL首先发现通过Table1.unique_not_null_c

8、olumn条件的限制,Table1会变成一个常量表。然后,取回该值。  如果取回操作失败(Table1中没有行满足条件unique_not_null_column=5),那么该常量表就包含0行,那么如果对该语句执行EXPLAIN操作,会得到提示信息:  Impossibley

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。