| Previous | Table of Contents | Next |
SQL tuning involves the use of the explain-plan table, or the use of Oracle or third-party tools that display the contents of the explain-plan table. Oracle tools include Oracle Enterprise Manager Top Session, TKPROF (examines trace files), and the EXPLAIN command combined with a SQL statement to display the results. This section will discuss how to interpret explain plan results and list coding techniques that will help avoid problems when coding SQL statements.
The explain plan is a necessity for tuning SQL statements for both the rule-based and cost-based optimizers. Listing 24.14 shows how to load the plan table and query the results. This plan table can be set up for any user by running the $ORACLE_HOME/rdbms/admin/utlxplan.sql script from SQL*Plus. Some tools display important cost-based optimizer statistics (such as Platinum Technology SQL Station, Figure 24.8) that greatly aid in the tuning process of SQL statements. Please note that the plan table results of Listing 24.14 to that of Platinum Technologys SQL Station in Figure 24.8 are from the same SQL statement. The largest performance gains will be had by tuning the top four or five steps of the explain plan. It would be difficult at best to determine the order of processing of any of the steps in Listing 24.14. Also note the numbers in parentheses just to the right of each explain step in Figure 24.8. These figures are the cost-based cost, the number of rows affected, and the number of bytes affected by this step. Step 1 in Figure 24.8, Table Access [FULL], should usually be avoided; reviewing the row count and bytes affected, it would cause a performance degradation to resolve this full table access.
Figure 24.8. SQL station explain plan display.
Listing 24.14. Explain plan table and results.
EXPLAIN PLAN INTO PLAN _TABLE FOR
select lname, fname, sal, cd.description, dept.description
from employees e, sal_history s, job_history j,
job_codes cd, dept_history d, departments dept
where e.emp_seq = s.emp_seq
and e.emp_seq = j.emp_seq
and e.emp_seq = d.emp_seq
and j.job_seq = cd.job_seq
and d.dept_seq = dept.dept_seq
and s.effective_date = (select max(effective_date)
from sal_history s1
where e.emp_seq = s1.emp_seq
and effective_date <= sysdate)
and j.effective_date = (select max(effective_date)
from job_history j1
where e.emp_seq = j1.emp_seq
and effective_date <= sysdate)
and d.effective_date = (select max(effective_date)
from dept_history d1
where e.emp_seq = d1.emp_seq
and effective_date <= sysdate);
select COST, OPERATION, OPTIONS, OBJECT_NAME
from PLAN_TABLE;
COST OPERATION OPTIONS OBJECT_NAME
---------- ------------------------ ------------- --------------
26 SELECT STATEMENT
FILTER
26 NESTED LOOPS
25 NESTED LOOPS
24 NESTED LOOPS
22 NESTED LOOPS
18 NESTED LOOPS
3 TABLE ACCESS FULL EMPLOYEES
TABLE ACCESS CLUSTER SAL_HISTORY
TABLE ACCESS CLUSTER JOB_HISTORY
TABLE ACCESS CLUSTER DEPT_HISTORY
1 TABLE ACCESS BY ROWID JOB_CODES
INDEX UNIQUE SCAN I_JOBS
TABLE ACCESS BY ROWID DEPARTMENTS
INDEX UNIQUE SCAN I_DEPTS
SORT AGGREGATE
1 TABLE ACCESS CLUSTER DEPT_HISTORY
INDEX UNIQUE SCAN I_EMP_EMPNO
SORT AGGREGATE
1 TABLE ACCESS CLUSTER JOB_HISTORY
INDEX UNIQUE SCAN I_EMP_EMPNO
SORT AGGREGATE
1 TABLE ACCESS CLUSTER SAL_HISTORY
INDEX UNIQUE SCAN I_EMP_EMPNO
24 rows selected.
Note:
Oracles TKPROF process is the only process I am aware of from Oracle Corporation that displays the cost, row, and byte information per explain step.
| Previous | Table of Contents | Next |