An explain plan is a representation of the access path that is taken when a query is executed within Oracle.
Query processing can be divided into 7 phases:
[1] Syntactic
Checks the syntax of the query
[2] Semantic
Checks that all objects exist and are accessible
[3] View Merging
Rewrites query as join on base tables as opposed to using views
[4] Statement
Transformation
Rewrites query transforming some complex constructs into simpler ones where appropriate (e.g. subquery merging, in/or transformation)
[5] Optimization
Determines the optimal access path for the query to take. With the Rule Based Optimizer (RBO) it uses a set of heuristics to determine access path. With the Cost Based Optimizer (CBO) we use statistics to analyze the relative costs of accessing objects.
[6] QEP Generation
QEP = Query Evaluation Plan
[7] QEP Execution
QEP = Query Evaluation Plan
Join Types
Sort Merge Join (SMJ)
Nested Loops (NL)
Hash Join
Sort Merge Join
SQL> explain plan for
select /*+ ordered */ e.deptno,d.deptno
from emp e,dept d
where e.deptno = d.deptno
order by e.deptno,d.deptno;
Query Plan
-------------------------------------
SELECT STATEMENT [CHOOSE] Cost=17
MERGE JOIN
SORT JOIN
TABLE ACCESS FULL EMP [ANALYZED]
SORT JOIN
TABLE ACCESS FULL DEPT [ANALYZED]
Nested Loops
SQL> explain plan for
select a.dname,b.sql
from dept a,emp b
where a.deptno = b.deptno;
Query Plan
-------------------------
SELECT STATEMENT [CHOOSE] Cost=5
NESTED LOOPS
TABLE ACCESS FULL DEPT [ANALYZED]
TABLE ACCESS FULL EMP [ANALYZED]
Hash Join
SQL> explain plan for
select /*+ use_hash(emp) */ empno
from emp,dept
where emp.deptno = dept.deptno;
Query Plan
----------------------------
SELECT STATEMENT [CHOOSE] Cost=3
HASH JOIN
TABLE ACCESS FULL DEPT
TABLE ACCESS FULL EMP
SQL> set autotrace traceonly explain;
SQL> select * from test;
Execution Plan
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20M| 95M| 8480 (3)| 00:01:42 |
| 1 | TABLE ACCESS FULL| TEST | 20M| 95M| 8480 (3)| 00:01:42 |
--------------------------------------------------------------------------
SQL> select /*+ PARALLEL(4) */ *
2 from test
3 /
Execution Plan
----------------------------------------------------------
Plan hash value: 3388271637
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20M| 95M| 2351 (3)| 00:00:29 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 20M| 95M| 2351 (3)| 00:00:29 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 20M| 95M| 2351 (3)| 00:00:29 | Q1,00 | PCWC | |
| 4 | TABLE ACCESS FULL| TEST | 20M| 95M| 2351 (3)| 00:00:29 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------
Note
-----
- Degree of Parallelism is 4 because of hint
SQL> select /*+ PARALLEL(2) */ *
2 from test ;
Execution Plan
----------------------------------------------------------
Plan hash value: 3388271637
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20M| 95M| 4703 (3)| 00:00:57 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 20M| 95M| 4703 (3)| 00:00:57 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 20M| 95M| 4703 (3)| 00:00:57 | Q1,00 | PCWC | |
| 4 | TABLE ACCESS FULL| TEST | 20M| 95M| 4703 (3)| 00:00:57 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------
Note
-----
- Degree of Parallelism is 2 because of hint
SQL>