第09课:等价推理

在 SQL 语句中,经常会有 A=B 这样的约束条件,它的操作符是等值操作符。我们将这种等值约束条件称为“等价条件”,而基于多个等价条件进行推理而获得的等价属性的集合就是“等价类”。

含有常量的等价推理

假如等价约束条件中的一端是常量,这种等价的推理就会显得更有意义。假如有两个约束条件 A=B 和 B=5,从谓词下推的角度来看,A=B 肯定只能作为一个连接条件。只有在连接操作做完之后,A=B 这样的约束条件才能获得约束条件两端的值。因此,这个约束条件是没有办法下推的,对于 B=5 这样的约束条件呢?如果是内连接的话,通常而言它是能下推的。

如果能通过 A=B 和 B=5 这样的两个约束条件推理出一个新的 A=5 的约束条件,由于 A=5 这样的单属性(只涉及一个表)约束条件或许能够下推到单表上,这样就可以在对表进行扫描的时候把没用的元组过滤掉,从而提高执行的效率。

例如 SQL 语句 SELECT * FROM TEST_A a,TEST_B b WHERE a.a = b.a AND b.a = 5,本来只能在连接结果产生之后使用 a.a = b.a 对连接结果进行过滤。但是如果推理出 b.a = 5 这样一个过滤条件,那么就能把这个过滤的操作下推到对 TEST_A 表的扫描上。如下面的示例所示,的确产生了新的约束条件 a.a = 5。

从执行计划中还可以看出,a.a = b.a 这个约束条件也被消除掉了,这是因为做扫描操作的时候已经把不等于 5 的数据过滤掉了,只有等于 5 的数据才能被返回给嵌套循环连接结点。由此,在嵌套循环连接结点再做一次 a.a = b.a 就显得有点多余了。

postg
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值