【DB筆試面試619】在Oracle中,舉例說明「連接因式分解(Join factorization,JF)」查詢轉換。

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在Oracle中,舉例說明「連接因式分解(Join factorization,JF)」查詢轉換。

答案部分

LHR@orclasm > SELECT  /*+FULL(A) FULL(B)*/  A.*,B.DNAME FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND A.EMPNO=6    2  UNION ALL    3  SELECT  /*+FULL(A) FULL(B)*/  A.*,B.DNAME FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND A.EMPNO=7;    no rows selected      Execution Plan  ----------------------------------------------------------  Plan hash value: 1245103347    -------------------------------------------------------------------------------------------  | Id  | Operation            | Name               | Rows  | Bytes | Cost (%CPU)| Time     |  -------------------------------------------------------------------------------------------  |   0 | SELECT STATEMENT     |                    |     2 |   244 |     8  (13)| 00:00:01 |  |*  1 |  HASH JOIN           |                    |     2 |   244 |     8  (13)| 00:00:01 |  |   2 |   VIEW               | VW_JF_SET$623BBB07 |     2 |   200 |     4   (0)| 00:00:01 |  |   3 |    UNION-ALL         |                    |       |       |            |          |  |*  4 |     TABLE ACCESS FULL| EMP                |     1 |    87 |     2   (0)| 00:00:01 |  |*  5 |     TABLE ACCESS FULL| EMP                |     1 |    87 |     2   (0)| 00:00:01 |  |   6 |   TABLE ACCESS FULL  | DEPT               |     4 |    88 |     3   (0)| 00:00:01 |  -------------------------------------------------------------------------------------------    Predicate Information (identified by operation id):  ---------------------------------------------------       1 - access("ITEM_1"="B"."DEPTNO")     4 - filter("A"."EMPNO"=6)     5 - filter("A"."EMPNO"=7)    Note  -----     - dynamic sampling used for this statement (level=2)      Statistics  ----------------------------------------------------------           99  recursive calls            7  db block gets           32  consistent gets            0  physical reads         4536  redo size          866  bytes sent via SQL*Net to client          509  bytes received via SQL*Net from client            1  SQL*Net roundtrips to/from client            0  sorts (memory)            0  sorts (disk)            0  rows processed    LHR@orclasm > ALTER SESSION SET "_OPTIMIZER_JOIN_FACTORIZATION"=FALSE;    Session altered.    LHR@orclasm > SELECT  /*+FULL(A) FULL(B)*/  A.*,B.DNAME FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND A.EMPNO=6    2  UNION ALL    3  SELECT  /*+FULL(A) FULL(B)*/  A.*,B.DNAME FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND A.EMPNO=7;    no rows selected      Execution Plan  ----------------------------------------------------------  Plan hash value: 2703228680    ----------------------------------------------------------------------------  | Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |  ----------------------------------------------------------------------------  |   0 | SELECT STATEMENT    |      |     2 |   218 |     8  (50)| 00:00:01 |  |   1 |  UNION-ALL          |      |       |       |            |          |  |   2 |   NESTED LOOPS      |      |     1 |   109 |     4   (0)| 00:00:01 |  |*  3 |    TABLE ACCESS FULL| EMP  |     1 |    87 |     2   (0)| 00:00:01 |  |*  4 |    TABLE ACCESS FULL| DEPT |    82 |  1804 |     2   (0)| 00:00:01 |  |   5 |   NESTED LOOPS      |      |     1 |   109 |     4   (0)| 00:00:01 |  |*  6 |    TABLE ACCESS FULL| EMP  |     1 |    87 |     2   (0)| 00:00:01 |  |*  7 |    TABLE ACCESS FULL| DEPT |    82 |  1804 |     2   (0)| 00:00:01 |  ----------------------------------------------------------------------------    Predicate Information (identified by operation id):  ---------------------------------------------------       3 - filter("A"."EMPNO"=6)     4 - filter("A"."DEPTNO"="B"."DEPTNO")     6 - filter("A"."EMPNO"=7)     7 - filter("A"."DEPTNO"="B"."DEPTNO")      Statistics  ----------------------------------------------------------           93  recursive calls            7  db block gets           14  consistent gets            0  physical reads         4536  redo size          866  bytes sent via SQL*Net to client          509  bytes received via SQL*Net from client            1  SQL*Net roundtrips to/from client            0  sorts (memory)            0  sorts (disk)            0  rows processed  

本文選自《Oracle程序員面試筆試寶典》,作者:李華榮。