快速业务通道

MySQL Internals Optimizer

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
ition pruning)不依赖表的存储引擎,所以这功能是MySQL查询优化器的一部分。接下来章节描述分区裁剪(partition pruning)的细节。

 

分区裁剪概述

 分区裁剪(partition pruning)的实现步骤如下:

1。分析WHERE语句条件并构造区间图interval graph,用来描述分析的结果情况。

2。通过区间图,为每个区间找出被访问的分区集(包括子分区)。

3。构造查询所需要的分区集。


 区间图interval graph是自下而上的方式构造成,并来表示上述步骤的描述。接着讨论,我们会首先定义术语区间图interval graph,接着描述怎样用分区区间来组成一个区间图interval graph,最后描述区间图interval graph的工作流程。

 

分区区间(Partitioning Intervals)

单点区间(Single-Point Intervals)

 从最简单的情况开始,假设一个有N个列的分区表,通过分区类型p_type和分区函数p_func,表示如下:

CREATE TABLE t (columns)
PARTITION BY p_type(p_func(col1, col2,... colN)...);
 再假设查询的WHERE条件形式如下:


WHERE t.col1=const1 AND t.col2=const2 AND ... t.colN=constN
 我们能计算出p_func(const1, const2 ... constN),并挖掘出哪个分区包含的记录和WHERE条件一样。注意:这个流程会在所有的分区类型和所有的分区函数上操作。


 

 注意:此流程只工作在,如果WHERE条件的形式像上述那样,表的每个列必需被验证是否等与一些任意常数(不需要相同的常数为每列)。例如,如果上述例子的WHERE语句中没有col1=const1,那么我们不会计算p_func分区函数的值,也就不会约束实际被用的分区集。


 

 区间游历(Walking)

 假设一个分区表t被定义成columns列集,分区类型p_type,分区函数p_func使用integer类型字段int_col,如下:

CREATE TABLE t (columns)
PARTITION BY
p_type(p_func(int_col))
...
 假设我们有如下形式的WHERE条件查询:


WHERE const1 <= int_col <= const2
 我们能缩小此情况的条件成一系列单点区间(Single-Point Intervals),如下,通过转化此WHERE语句为以下关系:


int_field=const1       OR
int_field=const1 + 1   OR
int_field=const1 + 2   OR
...                    OR
int_field=const2

 

 在源

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