`
dacoolbaby
  • 浏览: 1271514 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

 

 

 

 

 

分享到:
评论

相关推荐

    oracle官方教材

    - **谓词推入示例**: 将WHERE子句中的条件推入到子查询中。 - **传递性示例**: 通过传递性简化表达式。 **基于成本的优化程序** - **评估器**: 评估每个操作的成本。 - **选择性**: 估计返回的行数。 - **基数**: ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    关于oracle的sql优化资料

    - **PUSH_JOIN_PRED(v)** 和 **NO_PUSH_JOIN_PRED(v)**: 控制JOIN谓词是否推入视图。 ##### 5. 读取方式 - **FULL(tab)**: 对表执行全表扫描。 - **CACHE(tab)**: 如果表大小小于`CACHE_SIZE_THRESHOLD`参数设置的...

    (E文)基于成本的Oracle优化法则.pdf

    - **9.2.5 推入谓词**:解释推入谓词的概念及其优势。 - **9.3 一般子查询**: - **9.3.1 子查询参数**:讨论子查询参数的优化。 - **9.3.2 分类**:介绍子查询分类的方法。 - **9.3.3 半连接**:探讨半连接操作...

    Oracle CBO几种基本的查询转换详解

    谓语前推是CBO将查询条件推入子查询或联接操作的过程。当查询中的某个谓词可以直接应用于子查询的输入,CBO会尝试将这个谓词“前推”到子查询中,从而减少子查询返回的数据量。这样可以减少I/O操作,提高查询效率。...

Global site tag (gtag.js) - Google Analytics