第13课:表达式提取

本文探讨了数据库查询优化中的表达式提取技术,如何将OR连接的合取范式拆分并下推到基表,以减少连接操作的计算量。文章详细分析了提取表达式需要满足的条件,以及在选择率修正方面的重要性,并指出PostgreSQL在表达式优化上的局限性。
摘要由CSDN通过智能技术生成

如果有这样一条 SQL 语句:

SELECT * FROM STUDENT, COURSE WHERE (sno =1 AND cname=’math’) OR (sno = 2 AND cname = ‘physics’),

在对谓词做表达式预处理的时候,我们对这种类型的约束条件无从下手。我们知道 PostgreSQL 的约束条件的顶层是合取范式(或者说是“与”的方式),但这里的顶层是一个析取范式,这样的约束条件也只能应用到 STUDENT 表和 COURSE 表的连接结果上,对连接操作产生的结果进行过滤。如果有办法对其中的一些条件提取出来,并且下推到基表上,那么就会降低连接操作的计算量。

拆分约束条件

通过分析 (sno =1 AND cname='math') OR (sno = 2 AND cname = 'physics') 这个约束条件就会发现,它是 OR 谓词连接起来的两个合取范式: (sno =1 AND cname='math') 和 (sno = 2 AND cname = 'physics') ,这样的连接条件产生的结果有什么特点呢?

对于 STUDENT 表而言,能够顺利通过这两个合取范式过滤的元组,一定具有这样的特征:sno =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值