分布式数据库的查询优化算法研究_
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
再执行局部数据的查询语句Q2,返回局部查询结果Q2’,最后对局部查询结果Q1’和Q2’根据公共连接属性no进行自然连接操作,连接结果就是最终的全局查询结果。
假设student_1表和student_2表分别有1000条记录,student_1表中满足age>25的记录有100条,则中间查询结果的数据记录有100+100=200条。由此可见,经过查询优化后,中间查询结果的数据记录大大减少了,下面就分布式数据库的查询优化技术进行详细的介绍。
3.3 查询优化算法
3.3.1 基于关系代数等价变换的优化算法
基于关系代数等价变换的优化算法使用启发式优化方法对关系代数表达式进行优化。
在关系代数表达式中,最花费时间和空间的运算是笛卡儿积和连接操作,为此,引出三条启发式规则,用于对表达式进行转换,以减少中间关系的大小[1]。
①尽可能早地执行选择操作;
②尽可能早地执行投影操作;
③避免直接做笛卡儿积,把笛卡儿积操作之前和之后的一连串选择和投影合并起来一起做。
基于关系代数等价变换规则的优化算法的基本思想是:
把查询问题转变为关系代数表达式,分析得到的查询语法树,按等价变换规则优化(与集中式数据库的等价变换规则类似,这里不再详述)。算法首先利用关系代数等价变换规则,把查询树中的连接和合并操作尽可能上提,选择和投影操作尽可能下移到片段的定义处。然后判断是水平分片还是垂直分片,若为水平分片,则把分片条件与选择条件进行比较,去掉存在矛盾的片段,如果只剩下一个片段,就可以去掉一个并操作。若为垂直分片,则把片段的属性集与投影操作所涉及的属性集进行比较,去掉无关的所有片段。如果只剩下一个垂直片段,就可以去掉一个连接操作,从而达到优化查询的目的。
以全局数据模式中的学生表student(no,name,age,sex,class,grade)为例,先对学生表student进行垂直分片,使其分为student_1(no,name,age,sex)和
student_2(no,name,class,grade)两个数据模式,
再对student_1(no,name,age,sex)进行水平分片,使其分为student_11(sex=’m’)和student_12(sex=’f’)两个数据模式,最终形成student_11(sex=’m’)、student_12、student_2三个局部数据模式。
现在要查询性别为男性并且成绩在90分以上的所有学生的姓名,查询的SQL 语句为:
select name
from student
where sex=’m’ and grade>=90
其关系代数表达式为:
''90(())name sex m grade student πσ=∩>=
关系代数表达式的查询树如图3.2所示: πσname
''90
sex m grade =∩>=student
图3.2 关系代数表达式的查询树
对应片段上的查询树如图3.3所示: π∞ππno,name
no σσ''
sex m =90g r a d e >=∪
student_11student_12student_2student_1.no=student_2.no name
图3.3 对应的片段上的查询树
由图 3.3可以看出student_12的分片条件与查询选择条件矛盾,故去掉student_12片段,也就去掉了一个合并操作,同时还去掉了一个对student_11片段的一个选择操作,从而达到了优化的目的。
优化后的查询树如图3.4所示。 π∞ππno,name no
σ90g r a d e >=student_11
student_2student_1.no=student_2.no
name
图3.4 优化后的查询树
3.3.2 基于直接连接操作的优化算法
这是一种完全在连接的基础上考虑查询处理的策略。例如,对于一个涉及到存储在不同场地的三个关系进行连接的查询,首先把一个关系传送给第二个关系所在地,然后进行连接运算;再把运算结果传送到第三个关系所在地,计算它们的连接并产生查询结果。
假设关系R 在站点1,关系S 在站点2,在站点2需要获得R ∞S 的结果。如果在站点2直接计算R ∞S 的值,那么需要先把关系R 从站点1传输到站点2,其执行示意图如图3.5所示。
图3.5 基于连接的执行示例
3.3.3 基于半连接操作的优化算法
基于半连接操作的优化算法的思想:
数据在网络中传输时,以整个关系(也可以是片段)传输,显然是一种冗余的方法。在一个关系传输到另一场地后,并非每个数据都参与连接操作或都有用。因此,不参与连接的数据或无用的数据不必在网络中来回传输。基于半连接的优化策略的基本原理就是采用半连接操作,在网络中尽量只传输参与连接的数据
[1]。
可以采用半连接方法计算连接操作的值。设R 和S 的公共属性为a ,方法如下:
R ∞S =(R ∞()a S π)∞S
=(R ∝S)∞S
等式右边的式子称为半连接程序。其执行示意图如图3.6所示。
图3.6 基于半连接的执行示例
下面讨论这个半连接程序的操作过程和传输代价。其传输代价用T=X C C 10+估算。
第①步:在站点2计算关系S 在属性a 上的投影()a S π。
第②步:把()a S π的结果从站点2传到站点1,其传输代价为:
C 0+C 1*size(a)*val(a[S])
其中size(a)表示属性a 的长度,val(a[S])表示关系S 中属性a 的个数。
第③步:在站点1计算半连接,设其结果为R ’,则R ’=R ∝S 。实际上,这
个操作是执行R ∞()a S π。
第④步:把R ’从站点1传到站点2,其传输代价为: