快速业务通道

MySQL Internals Optimizer

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
查询表达式:


FROM Table1 ... WHERE unique_not_null_column=5
也会返回常数表(constant tables)。


 

 这个规则指一个常数表(constant tables)至多有一条记录值。MySQL就会优先评估是否为常数表(constant tables),并找出那个值。这样,MySQL会将这值插入查询语句。如这个例子:

SELECT Table1.unique_not_null_column, Table2.any_column
    FROM Table1, Table2
    WHERE Table1.unique_not_null_column = Table2.any_column
    AND Table1.unique_not_null_column = 5;
MySQL评估这语句时,首先就会发现,按照常数表(constant tables)的第二点定义,查询条件为unique_not_null_column的表Table1是一个常数表(constant tables),它就会取得这个值。


如果取值失败,也就是在表Table1里unique_not_null_column = 没值,EXPLAIN后结果:


Impossible WHERE noticed after reading const tables
相反,如果取值成功,也就是在表Table1里unique_not_null_column = 为一条记录值,MySQL会转化为如下语句:


SELECT 5, Table2.any_column
    FROM Table1, Table2
    WHERE 5 = Table2.any_column
    AND 5 = 5;

 

 事实上,这是一个很好的例子。优化器因前面提到的常数等值传递进行一些语句转化。另外,为什么要先描述常数等值传递,因为它在MySQL确认什么是常数表(constant tables)前就先进行了。优化器步骤的顺序,有时是有差别。


 虽然很多查询都没常数表(constant tables)参考。应该牢记,以后无论什么时候,常数constant字被提及,它是指任何一个字面上的值或者一个常数表(constant tables)的内容。

 

2.优化JOIN联接


 这部分讨论优化JOIN联接的不同方法。注意:JOIN联接不单单指JOIN类型,而是所有条件查询的类型。有些人更喜欢叫access type。

 

确定JOIN联接类型


 当评估查询条件表达式时,MySQL会确定它是属于哪个JOIN联接类型。

 如下有记录在档的JOIN类型,从最好到最坏的排序下来:

system:常数表(constant tables)的system类型
const:常数表(constant tables)
eq_ref:相等关系的唯一或主键索引
ref:相等关系的索引,此索引的值不能为NULL
ref_or_null:相等关系的索引,此索引的值可能为NULL
range:有关联的索引,如BETWEEN,IN,>=,LIKE等
index:顺序扫描索引
AL

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号