
♣题目 部分
在Oracle中,和“表达式和条件评估”相关的查询转换有哪些?
♣答案部分
(一)逻辑转换
1LHR@orclasm > SELECT /*+FULL(A) FULL(B)*/ * FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND B.DEPTNO=20; 2 3Execution Plan 4---------------------------------------------------------- 5Plan hash value: 4192419542 6 7--------------------------------------------------------------------------- 8| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 9---------------------------------------------------------------------------10| 0 | SELECT STATEMENT | | 4 | 468 | 5 (0)| 00:00:01 |11| 1 | NESTED LOOPS | | 4 | 468 | 5 (0)| 00:00:01 |12|* 2 | TABLE ACCESS FULL| DEPT | 1 | 30 | 2 (0)| 00:00:01 |13|* 3 | TABLE ACCESS FULL| EMP | 5 | 435 | 3 (0)| 00:00:01 |14---------------------------------------------------------------------------1516Predicate Information (identified by operation id):17---------------------------------------------------1819 2 - filter("B"."DEPTNO"=20)20 3 - filter("A"."DEPTNO"=20)SELECT /*+FULL(A) FULL(B)*/ * FROM SCOTT.EMP A,SCOTT.DEPT B WHERE A.DEPTNO=B.DEPTNO AND B.DEPTNO=20;
2
3Execution Plan
4----------------------------------------------------------
5Plan hash value: 4192419542
6
7---------------------------------------------------------------------------
8| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
9---------------------------------------------------------------------------
10| 0 | SELECT STATEMENT | | 4 | 468 | 5 (0)| 00:00:01 |
11| 1 | NESTED LOOPS | | 4 | 468 | 5 (0)| 00:00:01 |
12|* 2 | TABLE ACCESS FULL| DEPT | 1 | 30 | 2 (0)| 00:00:01 |
13|* 3 | TABLE ACCESS FULL| EMP | 5 | 435 | 3 (0)| 00:00:01 |
14---------------------------------------------------------------------------
15
16Predicate Information (identified by operation id):
17---------------------------------------------------
18
19 2 - filter("B"."DEPTNO"=20)
20 3 - filter("A"."DEPTNO"=20)(二)常量转换
1LHR@orclasm > SELECT * FROM SCOTT.EMP A WHERE a.sal>=100+50; 2Execution Plan 3---------------------------------------------------------- 4Plan hash value: 3956160932 5 6-------------------------------------------------------------------------- 7| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 8-------------------------------------------------------------------------- 9| 0 | SELECT STATEMENT | | 14 | 1218 | 3 (0)| 00:00:01 |10|* 1 | TABLE ACCESS FULL| EMP | 14 | 1218 | 3 (0)| 00:00:01 |11--------------------------------------------------------------------------1213Predicate Information (identified by operation id):14---------------------------------------------------1516 1 - filter("A"."SAL">=150)SELECT * FROM SCOTT.EMP A WHERE a.sal>=100+50;
2Execution Plan
3----------------------------------------------------------
4Plan hash value: 3956160932
5
6--------------------------------------------------------------------------
7| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
8--------------------------------------------------------------------------
9| 0 | SELECT STATEMENT | | 14 | 1218 | 3 (0)| 00:00:01 |
10|* 1 | TABLE ACCESS FULL| EMP | 14 | 1218 | 3 (0)| 00:00:01 |
11--------------------------------------------------------------------------
12
13Predicate Information (identified by operation id):
14---------------------------------------------------
15
16 1 - filter("A"."SAL">=150)(三)LIKE转换
1LHR@orclasm > SELECT * FROM SCOTT.EMP A WHERE A.ENAME LIKE 'lhr' ; 2-------------------------------------------------------------------------- 3| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 4-------------------------------------------------------------------------- 5| 0 | SELECT STATEMENT | | 1 | 87 | 3 (0)| 00:00:01 | 6|* 1 | TABLE ACCESS FULL| EMP | 1 | 87 | 3 (0)| 00:00:01 | 7-------------------------------------------------------------------------- 8 9Predicate Information (identified by operation id):10---------------------------------------------------1112 1 - filter("A"."ENAME"='lhr')SELECT * FROM SCOTT.EMP A WHERE A.ENAME LIKE 'lhr' ;
2--------------------------------------------------------------------------
3| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
4--------------------------------------------------------------------------
5| 0 | SELECT STATEMENT | | 1 | 87 | 3 (0)| 00:00:01 |
6|* 1 | TABLE ACCESS FULL| EMP | 1 | 87 | 3 (0)| 00:00:01 |
7--------------------------------------------------------------------------
8
9Predicate Information (identified by operation id):
10---------------------------------------------------
11
12 1 - filter("A"."ENAME"='lhr')(四)IN转换
1LHR@orclasm > SELECT * FROM SCOTT.EMP A WHERE A.ENAME IN ('lhr','DBA') ; 2-------------------------------------------------------------------------- 3| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 4-------------------------------------------------------------------------- 5| 0 | SELECT STATEMENT | | 1 | 87 | 3 (0)| 00:00:01 | 6|* 1 | TABLE ACCESS FULL| EMP | 1 | 87 | 3 (0)| 00:00:01 | 7-------------------------------------------------------------------------- 8 9Predicate Information (identified by operation id):10---------------------------------------------------1112 1 - filter("A"."ENAME"='DBA' OR "A"."ENAME"='lhr')SELECT * FROM SCOTT.EMP A WHERE A.ENAME IN ('lhr','DBA') ;
2--------------------------------------------------------------------------
3| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
4--------------------------------------------------------------------------
5| 0 | SELECT STATEMENT | | 1 | 87 | 3 (0)| 00:00:01 |
6|* 1 | TABLE ACCESS FULL| EMP | 1 | 87 | 3 (0)| 00:00:01 |
7--------------------------------------------------------------------------
8
9Predicate Information (identified by operation id):
10---------------------------------------------------
11
12 1 - filter("A"."ENAME"='DBA' OR "A"."ENAME"='lhr')(五)BETWEEN AND转换
1LHR@orclasm > SELECT * FROM SCOTT.EMP A WHERE A.EMPNO BETWEEN 1 AND 2; 2-------------------------------------------------------------------------------------- 3| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | 4-------------------------------------------------------------------------------------- 5| 0 | SELECT STATEMENT | | 1 | 87 | 1 (0)| 00:00:01 | 6| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 87 | 1 (0)| 00:00:01 | 7|* 2 | INDEX RANGE SCAN | PK_EMP | 1 | | 1 (0)| 00:00:01 | 8-------------------------------------------------------------------------------------- 910Predicate Information (identified by operation id):11---------------------------------------------------1213 2 - access("A"."EMPNO">=1 AND "A"."EMPNO"<=2)SELECT * FROM SCOTT.EMP A WHERE A.EMPNO BETWEEN 1 AND 2;
2--------------------------------------------------------------------------------------
3| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
4--------------------------------------------------------------------------------------
5| 0 | SELECT STATEMENT | | 1 | 87 | 1 (0)| 00:00:01 |
6| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 87 | 1 (0)| 00:00:01 |
7|* 2 | INDEX RANGE SCAN | PK_EMP | 1 | | 1 (0)| 00:00:01 |
8--------------------------------------------------------------------------------------
9
10Predicate Information (identified by operation id):
11---------------------------------------------------
12
13 2 - access("A"."EMPNO">=1 AND "A"."EMPNO"<=2)
















