前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试615】在Oracle中,和谓词相关的查询转换有哪些?

【DB笔试面试615】在Oracle中,和谓词相关的查询转换有哪些?

作者头像
小麦苗DBA宝典
发布2019-09-29 16:08:24
7780
发布2019-09-29 16:08:24
举报

题目部分

在Oracle中,和谓词相关的查询转换有哪些?

答案部分

(一)过滤谓词推入

LHR@orclasm > SELECT * FROM (SELECT * FROM VW_SVM_LHR V) WV WHERE WV.JOB='DBA';

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     3 |   114 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     3 |   114 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("JOB"='DBA' AND "EMPNO"<>7369)

LHR@orclasm > SELECT /*+NO_MERGE(WV)*/ * FROM (SELECT * FROM VW_SVM_LHR V) WV WHERE WV.JOB='DBA';

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 2734967094

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     3 |   261 |     3   (0)| 00:00:01 |
|   1 |  VIEW              |      |     3 |   261 |     3   (0)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| EMP  |     3 |   114 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("JOB"='DBA' AND "EMPNO"<>7369)

(二)连接谓词推入

LHR@orclasm > SELECT /*+NO_MERGE(V)*/ * FROM SCOTT.EMP T,VW_JPPD_LHR V WHERE T.EMPNO=V.EMPNO(+) AND T.ENAME='DBA';
-------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                  |     1 |    51 |     2   (0)| 00:00:01 |
|   1 |  NESTED LOOPS OUTER          |                  |     1 |    51 |     2   (0)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMP              |     1 |    38 |     2   (0)| 00:00:01 |
|*  3 |    INDEX SKIP SCAN           | IDX_FULL_EMP_LHR |     1 |       |     1   (0)| 00:00:01 |
|   4 |   VIEW PUSHED PREDICATE      | VW_JPPD_LHR      |     1 |    13 |     0   (0)| 00:00:01 |
|*  5 |    INDEX UNIQUE SCAN         | PK_EMP           |     1 |     4 |     0   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("T"."ENAME"='DBA')
       filter("T"."ENAME"='DBA')
   5 - access("T"."EMPNO"="T"."EMPNO")

LHR@orclasm > SELECT /*+NO_MERGE(V) NO_PUSH_PRED(V)*/ * FROM SCOTT.EMP T,VW_JPPD_LHR V WHERE T.EMPNO=V.EMPNO(+) AND T.ENAME='DBA';

-------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                  |     1 |    51 |     4  (25)| 00:00:01 |
|*  1 |  HASH JOIN OUTER             |                  |     1 |    51 |     4  (25)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMP              |     1 |    38 |     2   (0)| 00:00:01 |
|*  3 |    INDEX SKIP SCAN           | IDX_FULL_EMP_LHR |     1 |       |     1   (0)| 00:00:01 |
|   4 |   VIEW                       | VW_JPPD_LHR      |    14 |   182 |     1   (0)| 00:00:01 |
|   5 |    INDEX FULL SCAN           | IDX_FULL_EMP_LHR |    14 |    56 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("T"."EMPNO"="V"."EMPNO"(+))
   3 - access("T"."ENAME"='DBA')
       filter("T"."ENAME"='DBA')

LHR@orclasm > ALTER SESSION SET "_PUSH_JOIN_PREDICATE"=FALSE; 

Session altered.

LHR@orclasm > SELECT /*+NO_MERGE(V)*/ * FROM SCOTT.EMP T,VW_JPPD_LHR V WHERE T.EMPNO=V.EMPNO(+) AND T.ENAME='DBA';
-------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name             | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                  |     1 |    51 |     4  (25)| 00:00:01 |
|*  1 |  HASH JOIN OUTER             |                  |     1 |    51 |     4  (25)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| EMP              |     1 |    38 |     2   (0)| 00:00:01 |
|*  3 |    INDEX SKIP SCAN           | IDX_FULL_EMP_LHR |     1 |       |     1   (0)| 00:00:01 |
|   4 |   VIEW                       | VW_JPPD_LHR      |    14 |   182 |     1   (0)| 00:00:01 |
|   5 |    INDEX FULL SCAN           | IDX_FULL_EMP_LHR |    14 |    56 |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("T"."EMPNO"="V"."EMPNO"(+))
   3 - access("T"."ENAME"='DBA')
       filter("T"."ENAME"='DBA')

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档