首页 理论教育分布式数据库技术:查询分解和重写的案例

分布式数据库技术:查询分解和重写的案例

【摘要】:查询分解的最后一步是将查询重新写成关系代数的形式。重构关系代数查询以改进性能。树根则代表查询结果。其次,根节点是关于结果属性的投影操作,显示在Select子句中。 查询“那些在CAD/CAM项目中工作了1年或2年的名字不叫李林的雇员”,其SQL语句如下:Select enamef rom PROJ,EMP_PROJ,EMPwhere EMP_PROJ.eno=EMP.enoAND EMP_PROJ.pno=PROJ.pnoAND ename≠"李林"AND PROJ.pname="CAD/CAM"AND这可以映射成图7.2所示的算符树。应用变换规则,从这棵算符树可以派生出许多不同的树。如何重写,请看下面即将介绍的等价变换。图7.2算符树的例子

查询分解的最后一步是将查询重新写成关系代数的形式。典型情况可以通过如下两步实现。

(1)将关系演算形式的查询直接转换成关系代数形式的查询。

(2)重构关系代数查询以改进性能。

为了清楚理解重写的原因,我们可以用算符树来表示关系代数查询。算符树是一棵树,叶子节点是存放在数据库中的一个关系,非叶子节点则是关系代数算符操作的中间关系。操作的顺序是从叶子到根。树根则代表查询结果。

将关系演算查询映射到算符树,可以通过如下方式实现。首先,为每个不同的元组变量(对应一个关系)创建一个叶子。在SQL中,from子句中的叶子(蕴含的是关系)可以直接使用。其次,根节点是关于结果属性的投影操作,显示在Select子句中。然后,where子句限定翻译成关系运算(Select、join、union等)的适当序列,处于根和叶子之间。

【例7.4】 查询“那些在CAD/CAM项目中工作了1年(12个月)或2年(24个月)的名字不叫李林的雇员”,其SQL语句如下:

Select ename

f rom PROJ,EMP_PROJ,EMP

where EMP_PROJ.eno=EMP.eno(www.chuimin.cn)

AND EMP_PROJ.pno=PROJ.pno

AND ename≠"李林"

AND PROJ.pname="CAD/CAM"

AND(dur=12OR dur=24)

这可以映射成图7.2所示的算符树。

应用变换规则,从这棵算符树可以派生出许多不同的树。按照变换后的树,可以重写查询。如何重写,请看下面即将介绍的等价变换。

图7.2 算符树的例子