oracle 谓词是什么意思,Oracle谓词推入

在Oracle中,谓词一般就是指where后面的那些过滤条件。

而在执行计划中,我们有时候会看到一个信息:

VIEW PUSHED PREDICATE

就是传说中的谓词推入。

谓词推入是什么意思?

就是指视图(VIEW)在做关联之前,会将外面一层的数据放到视图里面先做过滤。

一般是将外层关联的索引,放到视图内的表的索引上面来做。

在CSDN落落的Oracle优化Blog里面,有这样一个优化案例:

http://blog.csdn.net/robinson1988/article/details/6792078

其中说到:

谓词推入是双刃剑,但是我看到的更多的案例是谓词推入反而引发性能问题,问题的原因在于谓词推入后CBO计算基数就 大大减小了。

也就是说,在谓词推入后,引起CBO计算基数减少。

这是因为使用谓词推入后,索引会进行nested loop,而不会使用hash join在某些条件下,就会降低速度了。

SELECT *

FROM table1, t1

(

SELECT /*+ NO_PUSH_PRED */

*

FROM table2 t2

WHERE t2.col1 = :value1

) t2o

WHERE t2o.col2 = t1.col2

这里,会将table1和t1视图进行hash join,从而返回结果

SELECT *

FROM table1, t1

(

SELECT /*+ PUSH_PRED */

*

FROM table2 t2

WHERE t2.col1 = :value1

) t2o

WHERE t2o.col2 = t1.col2

这里,将会使用NESTED LOOPS当索引(t2.col1, t2.col2)被定义的情况下。

当视图中返回 col2 索引字段的时候,会加速连接过程。

但是,如果 col2 纯粹是展示字段用,而逻辑上不使用它作为过滤,则会slow down整个连接过程。

这个就是基于谓词推入的oracle

Refer to:http://stackoverflow.com/questions/1044584/how-could-predicate-pushing-on-an-inline-view-slow-down-a-query

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle触发器是一种在数据库中定义的特殊类型的存储过程,它会在指定的数据库事件发生时自动执行。在Oracle11g和Oracle12c中,可以定义和使用多种类型的触发器。其中包括简单DML触发器(如BEFORE、AFTER和INSERT OF触发器)、组合触发器和非DML触发器(如DDL事件触发器和数据库事件触发器)[1]。 触发器的作用是在特定的数据库事件发生时执行一系列的操作,例如在插入、更新或删除数据时触发某些逻辑。触发器可以用于实现数据完整性约束、审计跟踪、数据变更记录等功能[1]。 创建触发器的语法如下: CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE | {INSERT | UPDATE | DELETE}} ON table_name [FOR EACH ROW] [WHEN (condition)] [DECLARE] -- 声明变量和常量 BEGIN -- 触发器的逻辑代码 END; 触发器可以根据需要定义在表级别或行级别,并可以使用条件谓词来区分不同的触发事件。例如,INSERTING条件谓词在INSERT事件发生时为TRUE,UPDATING条件谓词在UPDATE事件发生时为TRUE,DELETING条件谓词在DELETE事件发生时为TRUE[3]。 总结起来,Oracle触发器是一种在数据库中定义的特殊类型的存储过程,可以在特定的数据库事件发生时自动执行一系列的操作。在Oracle11g和Oracle12c中,可以定义和使用多种类型的触发器,包括简单DML触发器、组合触发器和非DML触发器。触发器可以用于实现数据完整性约束、审计跟踪、数据变更记录等功能[1][2][3]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值