
♣ 题目 部分
在Oracle中,和视图相关的查询转换有哪些?
♣ 答案部分
(一)简单视图合并
1CREATE OR REPLACE VIEW VW_SVM_LHR AS SELECT * FROM SCOTT.EMP WHERE EMPNO<>7369;
2SELECT * FROM VW_SVM_LHR V WHERE V.JOB='DBA';
3Execution Plan
4----------------------------------------------------------
5Plan hash value: 3956160932
6
7--------------------------------------------------------------------------
8| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
9--------------------------------------------------------------------------
10| 0 | SELECT STATEMENT | | 3 | 114 | 3 (0)| 00:00:01 |
11|* 1 | TABLE ACCESS FULL| EMP | 3 | 114 | 3 (0)| 00:00:01 |
12--------------------------------------------------------------------------
13
14Predicate Information (identified by operation id):
15---------------------------------------------------
16
17 1 - filter("JOB"='DBA' AND "EMPNO"<>7369)
18
19
20
21LHR@orclasm > SELECT /*+ NO_MERGE(V)*/ * FROM VW_SVM_LHR V WHERE V.JOB='DBA';
22
23no rows selected
24
25
26Execution Plan
27----------------------------------------------------------
28Plan hash value: 45352968
29
30---------------------------------------------------------------------------------
31| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
32---------------------------------------------------------------------------------
33| 0 | SELECT STATEMENT | | 3 | 261 | 3 (0)| 00:00:01 |
34| 1 | VIEW | VW_SVM_LHR | 3 | 261 | 3 (0)| 00:00:01 |
35|* 2 | TABLE ACCESS FULL| EMP | 3 | 114 | 3 (0)| 00:00:01 |
36---------------------------------------------------------------------------------
37
38Predicate Information (identified by operation id):
39---------------------------------------------------
40
41 2 - filter("JOB"='DBA' AND "EMPNO"<>7369)
42
43LHR@orclasm > ALTER SESSION SET "_SIMPLE_VIEW_MERGING"=FALSE;
44
45Session altered.
46
47LHR@orclasm > SELECT * FROM VW_SVM_LHR V WHERE V.JOB='DBA';
48
49no rows selected
50
51
52Execution Plan
53----------------------------------------------------------
54Plan hash value: 45352968
55
56---------------------------------------------------------------------------------
57| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
58---------------------------------------------------------------------------------
59| 0 | SELECT STATEMENT | | 3 | 261 | 3 (0)| 00:00:01 |
60| 1 | VIEW | VW_SVM_LHR | 3 | 261 | 3 (0)| 00:00:01 |
61|* 2 | TABLE ACCESS FULL| EMP | 3 | 114 | 3 (0)| 00:00:01 |
62---------------------------------------------------------------------------------
63
64Predicate Information (identified by operation id):
65---------------------------------------------------
66
67 2 - filter("JOB"='DBA' AND "EMPNO"<>7369)
(二)外连接视图合并(Outer Join View Merging)
1CREATE OR REPLACE VIEW VW_SVM_LHR AS SELECT * FROM SCOTT.EMP WHERE EMPNO<>7369;
2SELECT * FROM VW_SVM_LHR V,SCOTT.DEPT T WHERE V.DEPTNO=T.DEPTNO(+);
3---------------------------------------------------------------------------
4| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
5---------------------------------------------------------------------------
6| 0 | SELECT STATEMENT | | 13 | 754 | 7 (15)| 00:00:01 |
7|* 1 | HASH JOIN OUTER | | 13 | 754 | 7 (15)| 00:00:01 |
8|* 2 | TABLE ACCESS FULL| EMP | 13 | 494 | 3 (0)| 00:00:01 |
9| 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |
10---------------------------------------------------------------------------
11
12Predicate Information (identified by operation id):
13---------------------------------------------------
14
15 1 - access("DEPTNO"="T"."DEPTNO"(+))
16 2 - filter("EMPNO"<>7369)
17
18
19--视图作为被驱动表:
20SELECT /*+ FULL(T)*/ * FROM VW_SVM_LHR V,SCOTT.DEPT T WHERE V.DEPTNO(+)=T.DEPTNO;
21---------------------------------------------------------------------------
22| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
23---------------------------------------------------------------------------
24| 0 | SELECT STATEMENT | | 13 | 754 | 7 (15)| 00:00:01 |
25|* 1 | HASH JOIN OUTER | | 13 | 754 | 7 (15)| 00:00:01 |
26| 2 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |
27|* 3 | TABLE ACCESS FULL| EMP | 13 | 494 | 3 (0)| 00:00:01 |
28---------------------------------------------------------------------------
29Predicate Information (identified by operation id):
30---------------------------------------------------
31
32 1 - access("DEPTNO"(+)="T"."DEPTNO")
33 3 - filter("EMPNO"(+)<>7369)
34
35
36--视图含有2个表:
37CREATE OR REPLACE VIEW VW_SVM2_LHR AS SELECT /*+ FULL(A) FULL(B)*/ A.*,B.DNAME FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND EMPNO<>7369;
38SELECT /*+ FULL(T)*/ * FROM VW_SVM2_LHR V,SCOTT.DEPT T WHERE V.DEPTNO(+)=T.DEPTNO;
39------------------------------------------------------------------------------------
40| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
41------------------------------------------------------------------------------------
42| 0 | SELECT STATEMENT | | 13 | 1508 | 10 (10)| 00:00:01 |
43|* 1 | HASH JOIN OUTER | | 13 | 1508 | 10 (10)| 00:00:01 |
44| 2 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 |
45| 3 | VIEW | VW_SVM2_LHR | 13 | 1248 | 7 (15)| 00:00:01 |
46|* 4 | HASH JOIN | | 13 | 663 | 7 (15)| 00:00:01 |
47| 5 | TABLE ACCESS FULL| DEPT | 4 | 52 | 3 (0)| 00:00:01 |
48|* 6 | TABLE ACCESS FULL| EMP | 13 | 494 | 3 (0)| 00:00:01 |
49------------------------------------------------------------------------------------
50
51Predicate Information (identified by operation id):
52---------------------------------------------------
53
54 1 - access("V"."DEPTNO"(+)="T"."DEPTNO")
55 4 - access("A"."DEPTNO"="B"."DEPTNO")
56 6 - filter("EMPNO"<>7369)
可见,视图被保留了下来,单独执行。
(三)复杂视图合并(Complex View Merging)
1LHR@orclasm > SELECT * FROM VW_CVM_LHR V,SCOTT.DEPT T WHERE V.JOB=T.DNAME AND V.JOB='DBA';
2
3no rows selected
4
5
6Execution Plan
7----------------------------------------------------------
8Plan hash value: 2922957592
9
10-----------------------------------------------------------------------------------
11| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
12-----------------------------------------------------------------------------------
13| 0 | SELECT STATEMENT | | 1 | 39 | 7 (15)| 00:00:01 |
14|* 1 | HASH JOIN | | 1 | 39 | 7 (15)| 00:00:01 |
15| 2 | VIEW | VW_CVM_LHR | 1 | 19 | 3 (0)| 00:00:01 |
16| 3 | HASH GROUP BY | | 1 | 8 | 3 (0)| 00:00:01 |
17|* 4 | TABLE ACCESS FULL| EMP | 3 | 24 | 3 (0)| 00:00:01 |
18|* 5 | TABLE ACCESS FULL | DEPT | 1 | 20 | 3 (0)| 00:00:01 |
19-----------------------------------------------------------------------------------
20
21Predicate Information (identified by operation id):
22---------------------------------------------------
23
24 1 - access("V"."JOB"="T"."DNAME")
25 4 - filter("T"."JOB"='DBA')
26 5 - filter("T"."DNAME"='DBA')
27
28LHR@orclasm > SELECT /*+MERGE(V)*/ * FROM VW_CVM_LHR V,SCOTT.DEPT T WHERE V.JOB=T.DNAME AND V.JOB='DBA';
29
30no rows selected
31
32
33Execution Plan
34----------------------------------------------------------
35Plan hash value: 2006461124
36
37----------------------------------------------------------------------------
38| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
39----------------------------------------------------------------------------
40| 0 | SELECT STATEMENT | | 1 | 28 | 8 (25)| 00:00:01 |
41| 1 | HASH GROUP BY | | 1 | 28 | 8 (25)| 00:00:01 |
42|* 2 | HASH JOIN | | 3 | 84 | 7 (15)| 00:00:01 |
43|* 3 | TABLE ACCESS FULL| DEPT | 1 | 20 | 3 (0)| 00:00:01 |
44|* 4 | TABLE ACCESS FULL| EMP | 3 | 24 | 3 (0)| 00:00:01 |
45----------------------------------------------------------------------------
46
47Predicate Information (identified by operation id):
48---------------------------------------------------
49
50 2 - access("T"."JOB"="T"."DNAME")
51 3 - filter("T"."DNAME"='DBA')
52 4 - filter("T"."JOB"='DBA')
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
---------------优质麦课------------

详细内容可以添加麦老师微信或QQ私聊。

About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。


喜欢就点击“好看”吧
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
















