【DB筆試面試614】在Oracle中,和視圖相關的查詢轉換有哪些?

640?wx_fmt=gif

♣題目 部分ide

在Oracle中,和視圖相關的查詢轉換有哪些?orm


     

♣答案部分



(一)簡單視圖合併blog

 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--------------------------------------------------------------------------1314Predicate Information (identified by operation id):15---------------------------------------------------1617   1 - filter("JOB"='DBA' AND "EMPNO"<>7369)18192021LHR@orclasm > SELECT /*+ NO_MERGE(V)*/ * FROM VW_SVM_LHR V WHERE V.JOB='DBA';2223no rows selected242526Execution Plan27----------------------------------------------------------28Plan hash value: 453529682930---------------------------------------------------------------------------------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---------------------------------------------------------------------------------3738Predicate Information (identified by operation id):39---------------------------------------------------4041   2 - filter("JOB"='DBA' AND "EMPNO"<>7369)4243LHR@orclasm > ALTER SESSION SET "_SIMPLE_VIEW_MERGING"=FALSE;4445Session altered.4647LHR@orclasm > SELECT * FROM VW_SVM_LHR V WHERE V.JOB='DBA';4849no rows selected505152Execution Plan53----------------------------------------------------------54Plan hash value: 453529685556---------------------------------------------------------------------------------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---------------------------------------------------------------------------------6364Predicate Information (identified by operation id):65---------------------------------------------------6667   2 - filter("JOB"='DBA' AND "EMPNO"<>7369)CREATE 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)hash


 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---------------------------------------------------------------------------1112Predicate Information (identified by operation id):13---------------------------------------------------1415   1 - access("DEPTNO"="T"."DEPTNO"(+))16   2 - filter("EMPNO"<>7369)171819--視圖做爲被驅動表: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---------------------------------------------------3132   1 - access("DEPTNO"(+)="T"."DEPTNO")33   3 - filter("EMPNO"(+)<>7369)343536--視圖含有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------------------------------------------------------------------------------------5051Predicate Information (identified by operation id):52---------------------------------------------------5354   1 - access("V"."DEPTNO"(+)="T"."DEPTNO")55   4 - access("A"."DEPTNO"="B"."DEPTNO")56   6 - filter("EMPNO"<>7369)CREATE 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)

可見,視圖被保留了下來,單獨執行。it



(三)複雜視圖合併(Complex View Merging)io



 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 910-----------------------------------------------------------------------------------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-----------------------------------------------------------------------------------2021Predicate Information (identified by operation id):22---------------------------------------------------2324   1 - access("V"."JOB"="T"."DNAME")25   4 - filter("T"."JOB"='DBA')26   5 - filter("T"."DNAME"='DBA')2728LHR@orclasm > SELECT /*+MERGE(V)*/ * FROM VW_CVM_LHR V,SCOTT.DEPT T  WHERE V.JOB=T.DNAME AND  V.JOB='DBA';2930no rows selected313233Execution Plan34----------------------------------------------------------35Plan hash value: 20064611243637----------------------------------------------------------------------------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----------------------------------------------------------------------------4647Predicate Information (identified by operation id):48---------------------------------------------------4950   2 - access("T"."JOB"="T"."DNAME")51   3 - filter("T"."DNAME"='DBA')52   4 - filter("T"."JOB"='DBA')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')
相關文章
相關標籤/搜索