数据库手把手解题——2.如何画语法树及优化
其他
2021-03-05 06:58:17
阅读次数: 0
前言:本篇主要讲解怎么画查询语法树并对其优化,因为我在之前学的时候,在网上其实没怎么找到详细地教程,还是自己一点一点扣书扣出来的,所以想写一篇具体来描述一下这类题的方法技巧。
如题,这是东华大学一年的考研题目:


我们来解决第二问的前提是先写出它的关系表达式:

这一步没什么技巧,学过关系代数就很简单,我们主要讲解如何画查询语法树:
第一步:转化关系表达式:就是将原来的三个表的自然连接转成笛卡尔积形式,在中间再加一个投影和选择即可;L就是指笛卡尔积里的所有属性,选择就是将这三个表连接起来的相同的属性,也比较简单,对照写出来即可;

第二步:画出原始的优化树,这个画出来很简单,就是把刚刚转化的关系表达式化成这样的形式:

最重要的第三步!优化!书上写的原则有很多,但其实只要记住该在哪投影,哪选择即可:
我先把图贴出来:

首先先看最上边,就是先写一个投影一个选择,投影投的就是咱们最后要的什么,选择就是右子树和左子树最后的连接,我们看右子树是Bike,那上面的选择操作一定就是
这样我们上面的树就写好了。
然后我们来到右子树,如果我们的条件是有在Bike里体现的,那一定就是加上Π和
,如果我们没有这方面的条件,那就只加一个Π就行,而很明显,在Bike里我们是有条件的,所以就搞成:
这样即可,就是我要用Bname来筛选出来,但我最后只要Bid就行了;下面的都是这个意思:
这也是同理,
我们要清楚的就是,条件是什么,我最后要什么就够了,这就是优化过程;
要注意一点的是这一点:
这一步要判断好,这一步输出的可就直接给上边的树了,要确认好上面的树需要什么;
然后就结束啦!其实很简单的,主要是分清条件是什么,每一步只需要什么。
转载自blog.csdn.net/dyyay521/article/details/111987032