快速业务通道

MySQL Internals Optimizer

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
(key1=c1 OR key2<c2) AND nonkey=c3;
 索引合并(INDEX MERGE),是实现成一种范围键(range key)并以cond_i(cond_1,cond_2。。。)条件构造成的容器。在做索引合并(INDEX MERGE)时,MySQL检索每个键扫描(keyscans)的行,然后通过一个消除重复的过程来运行它们。目前类Unique用于消除重复的。

 

INDEX MERGE优化器


 单一SEL_TREE对象不能被构造成在OR语句中有不同成员的键的条件,类似这条件:

key1 < c1 OR key2 < c2
 


 从MySQL5.0开始,这些条件被索引合并(INDEX MERGE)方法,和范围优化器(range optimizer)结构的类SEL_IMERGE处理。SEL_IMERGE代表了若干SEL_TREE对象的析取,这种被表示为:

sel_imerge_cond = (t_1 OR t_1 OR ... OR t_n)
 每个t_i(t_1,t_2。。。)代表一个SEL_TREE,没有一对(t_i,t_j)不同的SEL_TREE对象能被合并成单一的SEL_TREE对象。


 目前的实现方法在构建SEL_IMERGE时,只有当没有单一的SEL_TREE对象能被构建成被分析过的查询的一部分;如果发现单一SEL_TREE对象能被构造,就会马上丢弃SEL_TREE。这实际是一个限制,并且可能导致最坏行检索策略的使用。如下查询:


SELECT * FROM t WHERE (goodkey1=c1 OR goodkey1=c2) AND badkey=c3
 在badkey的扫描会被选择,即使在(goodkey1,goodkey1)上的索引合并(INDEX MERGE)会更快。


 

 索引合并(INDEX MERGE) 优化器会收集索引合并(INDEX MERGE)访问行的所有可能的路线列表。这种SEL_IMERGE结构列表表示如下的条件:


  (t_11 OR t_12 OR ... OR t_1k) AND
  (t_21 OR t_22 OR ... OR t_2l) AND
   ...                          AND
  (t_M1 OR t_M2 OR ... OR t_mp)
 当t_ij是一个SEL_IMERGE且一个条件就是一个SEL_IMERGE对象。


 最小成本的SEL_IMERGE对象用来检索行。

 索引合并(INDEX MERGE)构造函数的详细信息见:源代码sql/opt_range.cc,imerge_list_and_list(),imerge_list_or_list(),和SEL_IMERGE类的成员函数。

 

RANGE优化器

 为了范围RANGE查询,MySQL优化器构建一个SEL_TREE对象,如下这种形式:

range_cond = (cond_key_1 AND cond_key_2 AND ... AND cond_key_N)
 每一个cond_key_i都是一

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