SQL优化之你还不知道谓语推入吗?

本文介绍了SQL优化中的谓语推入概念,包括常数值和连接键的谓语推入,并通过实例分析了它们对性能的影响。谓语推入可能导致性能提升或下降,特别是当连接键的谓语推入可能引发嵌套循环,从而影响查询效率。理解谓语推入的条件和使用场景对于优化SQL查询至关重要。
摘要由CSDN通过智能技术生成

关注我的微信公众号:pythonislover,领取python,大数据,SQL优化相关视频资料!~

Python大数据与SQL优化笔 QQ群:771686295

 

 

谓语推入,估计有很多人,对这个术语都听过,但是却迷迷糊糊,好像知道,但是想说却说不出。

 

下面我试试说一说。

 

首先我要把谓语推入分成两种:

1.常数值的谓语推入

2.连接键的谓语推入

 

下面我们一个一个来说

 

什么叫常数值的谓语推入

 

SQL> create view v_predicate_push asselect e.* , d.DNAME,d.LOCfrom emp e inner join dept don e.DEPTNO = d.DEPTNO;  2    3    4
View created.
SQL> explain plan forselect * from v_predicate_push where EMPNO=7499;  2Explained.
SQL> set linesize 100SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT----------------------------------------------------------------------------------------------------Plan hash value: 2385808155
----------------------------------------------------------------------------------------| Id  | Operation                    | Name    | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------------|   0 | SELECT STATEMENT             |         |     1 |    58 |     2   (0)| 00:00:01 ||   1 |  NESTED LOOPS                |         |     1 |    58 |     2   (0)| 00:00:01 ||   2 |   TABLE ACCESS BY INDEX ROWID| EMP     |     1 |    38 |     1   (0)| 00:00:01 ||*  3 |    INDEX UNIQUE SCAN         | PK_EMP  |     1 |       |     0   (0)| 00:00:01 ||   4 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    80 |     1   (0)| 00:00:01 ||*  5 |    INDEX UNIQUE SCAN         | PK_DEPT |     1 |       |     0   (0)| 00:00:01 |
PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):---------------------------------------------------
   3 - access("E"."EMPNO"=7499)   5 - access("E"."DEPTNO"="D"."DEPTNO")
18 rows selected.

 

SQL> create view v_predicate_push_1 asselect e.* , d.DNAME,d.LOCfrom emp e inner join dept don e.DEPTNO = d.DEPTNOunion allselect e.* , d.DNAME,d.LOCfrom emp e inner join dept don e.DEPTNO = d.DEPTNO;  2    3    4    5    6    7    8
View created.
SQL> explain plan forselect * from v_predicate_push_1 where EMPNO=7499;  2
Explained.

SQL> set linesize 400SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值