Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Explain plan
SQL> explain plan
2 set statement_id = 't1'
3 for
4 select a.id from customer b,sales_order a
5 where exists (select 'x' from sales_order_items c where c.id= a.id
and
6 c.prod_id not in (601,700))
7 and
8 a.cust_id = b.id and a.region = 'CHICAGO';
Explained.
SQL> SELECT OPERATION, OPTIONS, OBJECT_NAME, ID,
2 PARENT_ID, POSITION 3 FROM PLAN_TABLE 4 WHERE STATEMENT_ID = 't1' 5 ORDER BY ID; OPERATION OPTIONS OBJECT_NAME
------------------------------ ------------------------------ --------------
----------------
ID PARENT_ID POSITION
FILTER
1 0 1
NESTED LOOPS
2 1 1
TABLE ACCESS FULL SALES_ORDER 3 2 1 INDEX UNIQUE SCAN CUSTOMER_X 4 2 2 TABLE ACCESS BY ROWID SALES_ORDER_ITEMS 5 1 2 INDEX RANGE SCANSALES_ORDER_ITEMS_X
OPERATION OPTIONS OBJECT_NAME
------------------------------ ------------------------------ --------------
----------------
ID PARENT_ID POSITION --------- --------- --------- 6 5 1
7 rows selected.
2. after analyzing the table so the optimer is COST-BASED.
LPAD('',2*LEVEL)||OPERATION
OPTIONS OBJECT_NAMEFILTER NESTED LOOPS
------------------------------ ------------------------------
TABLE ACCESS FULL SALES_ORDER INDEX UNIQUE SCAN CUSTOMER_X TABLE ACCESS BY ROWID SALES_ORDER_ITEMS INDEX RANGE SCAN SALES_ORDER_ITEMS_X
6 rows selected.
1 select lpad(' ',2*level)||operation||' '||DECODE (id,0,'cost = '||
position) operation,
2 options, object_name
3 from plan_table
4 connect by prior id = parent_id
5 start with id = 0
6* order by id
SQL> /
OPERATION
OPTIONS OBJECT_NAMESELECT STATEMENT cost = 3
------------------------------ ------------------------------
FILTER NESTED LOOPS
TABLE ACCESS FULL SALES_ORDER INDEX UNIQUE SCAN CUSTOMER_X TABLE ACCESS BY ROWID SALES_ORDER_ITEMS INDEX
OPERATION
OPTIONS OBJECT_NAME
------------------------------ ------------------------------
RANGE SCAN SALES_ORDER_ITEMS_X
7 rows selected.
SQL> hi can anyone please be able to send me some idea of how to tune this query to avoid the full table scan on the sales orders table.
![]() |
![]() |