谓词推入(pushing predicate)

2023-11-07 20:21

本文主要是介绍谓词推入(pushing predicate),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

谓词推入(PUSHINGPREDICATE)

 

PushingPredicate(谓词推入):当SQL语句中包含有不能合并的视图,并且视图有谓词过滤(也就是where过滤条件),CBO会将where过滤条件推入视图中,这个就叫做谓词推入。谓词推入的主要目的就是让Oracle尽可能早的过滤掉无用的数据,从而提升查询性能。

 

下面举个例子(本例基于Scott用户Oracle11gR2):

create or replace view emp1 as select /*+NO_MERGE */ename,job,deptno from emp where sal>(select avg(sal) from emp);


按照道理来说是不是应该在VIEW上面去过滤?

SQL语句中的where job='ANALYST' 是在视图里面进行过滤的

(怎么判断是在视图里面过滤的?因为VIEW关键字前面没有*),这种就叫做谓词推进

现在我加入rownum>=1约束条件,去掉 HINT

create or replace view emp1 as select ename,job,deptno from empwhere sal>(select avg(sal) from emp) and rownum>=1;

第一个是不是说VIEW上面没*??

没*号就没过滤条件但过滤条件跑到VIEW的表里去了谓词推入了

第二个情况是不是说在VIEW上面过滤的??视图上面没*号是不是没被谓词推入??

 

这个时候CBO没有做谓词推入,因为VIEW前面有* ,filter("JOB"='ANALYST') 是直接在VIEW上面进行过滤的,我们看执行计划的时候,VIEW前面有* 就需要关注了。

有些谓词推入,执行计划中会有VIEW PUSHED PREDICATE 关键字,出现这种情况,一般是SQL里面有视图,并且这个视图是用createview ...创建的。当你看到VIEWPUSHED PREDICATE 关键字的时候要特别留意了。

 

禁止谓词推入

ALTER SESSION SET "_push_join_predicate" = false;

ALTER SYSTEM SET "_push_join_predicate" = false;
————————————————
版权声明:本文为CSDN博主「leo0805leo0805」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leo0805/article/details/78251439

这篇关于谓词推入(pushing predicate)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/366070

相关文章

谓词的使用(predicate)

原文:http://blog.csdn.net/quanzheng92/article/details/46532021 /** 一 运算符*/ // 1   "> < >= <= === != <> between" 比较运算符     NSPredicate *predicate =[NSPredicatepredicateWithFormat:@"age > 3"];

谓词和量词

一、个体词和谓词 命题是一句陈述句,命题由个体词和谓词组成。 个体词是句子中的主语部分,比如这里的王童。 谓词是句子里的剩余部分,比如是一个三好学生 个体词用小写字母表示,谓词用大写字母+()表示,()里写小写字母。 每个命题都可以化成这种形式 二、量词 存在,任意  都是量词,当表达式里面存在量词,为了表述方便,把个体域定义为全局个体域,把个体定义成特性谓词。 出

openGauss 之谓词下推代码走读

一. 前言        谓词下推是每一个SQL引擎必备的功能。本文主要通过走读代码了解openGauss中是如何实现谓词下推能力的。        谓词下推即是将过滤条件尽可能往tablescan的数据源节点下推,以实现上层算子尽可能少计算的能力,如下所示的执行计划便已经将谓词id<55下推到了tablescan节点。 二. 执行计划生成时将谓词信息保存在ScanState.ps.

谓词和CASE

谓词(LIKE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS)及 CASE 假如我们有一张表,表名为 predicate_table,如下所示: +---------------+---------------+-------------+-------------+| number_column | string_column | date_column |

嵌套查询(二)-谓词EXISTS实现嵌套查询

一、EXISTS谓词 1、作用:用于判断一个子查询的结果是否为空 2、使用语法: 【NOT】EXISTS(子查询) 语义:如果子查询的查询结果不为空,则EXISTS为真,否则为假 二、举例 1、举例1:查询选修“003”课程的学生姓名 select sNfrom swhere exists(select *from sCwhere sC.sNo=s.sNo and cNo=

嵌套查询(一)-谓词IN、量词ANY、量词ALL

一、在多个表之间进行数据查询,除了可以使用连接查询之外,也可以使用嵌套查询,那么什么是嵌套查询呢?如何使用嵌套查询呢? 1、将一个SELECT-FROM查询,嵌套在另一个SELECT查询语句中,那么这个SELECT-FROM查询就叫嵌套查询或者子查询,被嵌套的上层查询被称为父查询,在子查询中还可以继续嵌入子查询,构成多层嵌套查询,一个查询的结果可能是一个关系,即元组的集合,也可能是一个值,即聚集

Java8-Function-Consumer-Predicate

函数式接口 概念: 针对函数式编程接口,一般可以定义为: Consumer c = (o) -> {System.out.println(o);}; // 函数式编程接口都只有一个抽象方法,因此在采用这种写法时,编译器会将这段函数编译后当作该抽象方法的实现// 如果接口有多个抽象方法,编译器就不知道这段函数应该是实现哪个方法的了。// 因此,=后面的函数体我们就可以看成是accept

谓词逻辑(一)

一、句子的谓词符号化 谓词逻辑,也叫一阶逻辑,它对每个最简单的命题尽一步进行分解。 1·个体词:可以独立存在的客体。 2·谓词:描述一个个体词的属性或多个个体词之间的关系(可用一元函数和多元函数来理解)。 3·量词:表达个体词数量的关系。 两种量词的使用:全称量词与存在量词 二、给定公式的解释,求真值 三、自由变元和约束变元 量词的辖域:紧挨着量词的谓词或括号内

Flink1.17之前实现JdbcLookup谓词下推

Flink1.17之前实现JdbcLookup谓词下推 需求背景 Flink在1.17版本之前,flink-connector-jdbc的LookupJoin是不支持on条件下推的,例如on device_id=‘1’,查询SQL中是不会包含device_id='1’的条件,相关issue:https://issues.apache.org/jira/browse/FLINK-32321,在1

20240511,谓词,内建函数对象

拜托铠甲勇士真的帅好不好!!!  STL案例2-员工分组 10个员工,指派部门,员工信息(姓名,工资组成,部门:策划,美术,研发),随机分配部门和公司,MULTIMAP插入信息,KEY部门编号,VAL员工,分部门显示员工信息 #include<iostream>#include<string>#include<map>#include<vector>#include<ctime>u