Anda di halaman 1dari 25

m

The EXPLAIN PLAN results let you determine whether the


optimizer selects a particular execution plan, such as, nested
loops join. It also helps you to understand the optimizer
decisions, such as why the optimizer chose a nested loops join
instead of a hash join, and lets you understand the
performance of a query.

The EXPLAIN PLAN statement displays execution plans


chosen by the Oracle optimizer for SELECT, UPDATE,
INSERT, and DELETE statements. A statement's execution
plan is the sequence of operations Oracle performs to run the
statement

An execution plan includes an access path for each table that


the statement accesses and an ordering of the tables (the join
order) with the appropriate join method.

To execute a SQL statement, Oracle might need to perform


many steps. Each of these steps either retrieves rows of data
physically from the database or prepares them in some way for
the user issuing the statement. The combination of the steps
Oracle uses to execute a statement is called an execution plan.



 
 
 
 


 !""#

!  !


$ !"# "!


%& '()*
+"# ,""# 
+

,

& 
 # 
  

. /
0 
 
. 


1. 
#2#

 23!3!45466-




 
         

     ! "#$ ""


"  %  ! "#$ ""
&  %  ! "'" (")
*! +  , ! - '&)
' , %./% 0 "$ )"! &)
*)  %. 1  02%23 "  
- , %./% %   &( '!& &)
*(  %. 1  %2%23 "  


4  5 


5
6 

7

! 5
8 99:9 ,2%9;"!
) 4499:902%9<909:902%9
( 4499:9%  2%9<9%9:9%  2%=

The DBMS_XPLAN package provides an easy way to display


the output of the EXPLAIN PLAN command in several,
predefined formats.

The DBMS_XPLAN package supplies below table functions:


 : To format and display the contents of a plan table
 
: To format and display the contents of the
execution plan of any loaded cursor.

 
m This table function displays the contents of the plan
table.
m



 

(
table_name IN VARCHAR2 DEFAULT
'PLAN_TABLE',
statement_id IN VARCHAR2 DEFAULT NULL,
format
IN VARCHAR2 DEFAULT 'TYPICAL
);


# 






   
 .

 7!   
.

#. 



.3  .
 .

 7

. 



.

# 

. 

. 

#  
 
 

   
 .

3!   
.
 

  
 

 



 
.


  .!
.
   
.


 
 





 
8.
 . 


. 8 9

79+  
. 

::
 
+!

#"
!
 


59   
.
+  

 8
. 




 /!  ! 
    
8#
9$ 8 . 
  

58
  "
. 
   ;


/ 
. 
  
  8 2. 6
905 



 . 
 
 !
8.
 
  

     ! "    #  $% &#'
(# # ( ! )    ))*
 

Example (a) Using Explain Plan


m
m
m
m
m
m
m
m
m
m
m

SELECT TASK.TASK_NAME, TASK.TASK_NUMBER, PROJ.SEGMENT1, PROJ.NAME


FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK
WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001
AND TRUNC (SYSDATE) BETWEEN NVL (PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE ('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC (SYSDATE)
)
AND TASK.PROJECT_ID = PROJ.PROJECT_ID

Example (b) Displaying a Plan Table Using

(a) DBMS_XPLAN.DISPLAY

 + Execute an explain plan command on a SELECT


statement:
EXPLAIN PLAN FOR
select[query used above]

m
m

 , Display the plan using the DBMS_XPLAN.DISPLAY


table function
select * from table( 
  


*# "    # !--(.   

PLAN_TABLE_OUTPUT

Plan hash value: 3336623817

m
m
m
m
m
m
m
m
m
m
m

-------------------------------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 17 | 1156 | 4 (0)| 00:00:01 |
| 1 | NESTED LOOPS
|
| 17 | 1156 | 4 (0)| 00:00:01 |
|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL | 1 | 42 | 1 (0)| 00:00:01 |
|* 3 | INDEX UNIQUE SCAN
| PA_PROJECTS_U1 | 1 |
| 0 (0)| 00:00:01 |
| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS
| 17 | 442 | 3 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN
| PA_TASKS_N8 | 17 |
| 1 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------------------

m
m
m

Predicate Information (identified by operation id):


---------------------------------------------------

m
m
m
m
m
m

2 - filter(NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE(' 1900-01-01 00:00:00',


'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@!))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)

 

m This table function displays the explain plan of any
cursor loaded in the cursor cache.

m

DBMS_XPLAN.DISPLAY_CURSOR
(
sql_id IN VARCHAR2 DEFAULT NULL,
child_number IN NUMBER DEFAULT NULL,
format IN VARCHAR2 DEFAULT 'TYPICAL
);

< 

  #

. 

. 
; +.
;



   

5 
8
  
8#< /
; +=>; 
=>;


 
8!  
= ; +.  .  
.
=>

   
 .

3   
.

   
#

  # 

 # .
  
 .
 !
 
.  

 /
  <   
   

   # # .. <    .


 
8.
 . 

  
  
.8 


#.

4+54!

 !474!454!4444 
8   


  :



 . 
  9

3 9+  


 



 . 

 
.
  

3 9+  




// /
 



 .  
 .
.;


 



  .
  


 

 43 443 4# .

 /
  
  
 


?
 
 4


 84 

44

Example (a) Using Display_Cursor


m
m
m
m
m
m
m
m
m
m
m
m

SELECT /* abc */
TASK.TASK_NAME, TASK.TASK_NUMBER, PROJ.SEGMENT1, PROJ.NAME
FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK
WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001
AND TRUNC (SYSDATE) BETWEEN NVL
(PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE ('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC (SYSDATE)
)
AND TASK.PROJECT_ID = PROJ.PROJECT_ID

Step 1:
Execute the query
SELECT U  U
  
Step 2:
Get sql_id and child_number for the preceding statement:

 < !  # ! <



! < .


$8> <
  <

04@#@4
Step 3:
SELECT *
FROM TABLE (        
!

PLAN_TABLE_OUTPUT
SQL_ID 1hcqg71hwa8cc, child number 0
------------------------------------SELECT /* abc*/ TASK.TASK_NAME, TASK.TASK_NUMBER, PROJ.SEGMENT1, PROJ.NAME FROM
PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK WHERE 1 = 1 AND PROJ.PROJECT_ID = 1001
AND TRUNC (SYSDATE) BETWEEN NVL (PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE ('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC (SYSDATE)
) AND TASK.PROJECT_ID
= PROJ.PROJECT_ID
Plan hash value: 3336623817
------------------------------------------------------------------------------------------------| Id | Operation
| Name
| E-Rows |E-Bytes| Cost (%CPU)| E-Time |
------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
|
|
| 4 (100)|
|
| 1 | NESTED LOOPS
|
| 17 | 1156 | 4 (0)| 00:00:01 |
|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL |
1 | 42 | 1 (0)| 00:00:01 |
|* 3 | INDEX UNIQUE SCAN
| PA_PROJECTS_U1 | 1 |
| 0 (0)|
|
| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS
| 17 | 442 | 3 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN
| PA_TASKS_N8 | 17 |
| 1 (0)| 00:00:01 |
------------------------------------------------------------------------------------------------Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------1 - SEL$1
2 - SEL$1 / PROJ@SEL$1
3 - SEL$1 / PROJ@SEL$1
4 - SEL$1 / TASK@SEL$1
5 - SEL$1 / TASK@SEL$1

Outline Data
------------/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
OPT_PARAM('_b_tree_bitmap_plans' 'false')
OPT_PARAM('_fast_full_scan_enabled' 'false')
OPT_PARAM('_index_join_enabled' 'false')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "PROJ"@"SEL$1" ("PA_PROJECTS_ALL"."PROJECT_ID"))
INDEX_RS_ASC(@"SEL$1" "TASK"@"SEL$1" ("PA_TASKS"."PROJECT_ID"
"PA_TASKS"."PM_TASK_REFERENCE"))
LEADING(@"SEL$1" "PROJ"@"SEL$1" "TASK"@"SEL$1")
USE_NL(@"SEL$1" "TASK"@"SEL$1")
END_OUTLINE_DATA
*/
Predicate Information (identified by operation id):
--------------------------------------------------2 - filter((NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE(' 1900-01-01 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@!)))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)
Column Projection Information (identified by operation id):
----------------------------------------------------------1 - "PROJ"."NAME"[VARCHAR2,30], "PROJ"."SEGMENT1"[VARCHAR2,25],
"TASK"."TASK_NUMBER"[VARCHAR2,25], "TASK"."TASK_NAME"[VARCHAR2,20]
2 - "PROJ"."NAME"[VARCHAR2,30], "PROJ"."SEGMENT1"[VARCHAR2,25]
3 - "PROJ".ROWID[ROWID,10]
4 - "TASK"."TASK_NUMBER"[VARCHAR2,25], "TASK"."TASK_NAME"[VARCHAR2,20]
5 - "TASK".ROWID[ROWID,10]
Note
----- Warning: basic plan statistics not available. These are only collected when:
* hint 'gather_plan_statistics' is used for the statement or
* parameter 'statistics_level' is set to 'ALL', at session or system level

)$ - /&0 1 . 2 345 6*2) ** *  43

PLAN_TABLE_OUTPUT
SQL_ID 4azc9hf0kzg5g, child number 0
------------------------------------SELECT /* abc*/ /*+ GATHER_PLAN_STATISTICS */ TASK.TASK_NAME,
TASK.TASK_NUMBER,
PROJ.SEGMENT1, PROJ.NAME FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK
WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001 AND TRUNC (SYSDATE) BETWEEN NVL
(PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE
('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC
(SYSDATE)
) AND TASK.PROJECT_ID = PROJ.PROJECT_ID
Plan hash value: 3336623817
------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Starts | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 1 | 7 |00:00:00.01 |
6|
| 1 | NESTED LOOPS
|
| 1 | 7 |00:00:00.01 |
6|
|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL | 1 | 1 |00:00:00.01 |
|* 3 | INDEX UNIQUE SCAN
| PA_PROJECTS_U1 | 1 | 1 |00:00:00.01 |
2|
| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS
| 1 | 7 |00:00:00.01 |
3|
|* 5 | INDEX RANGE SCAN
| PA_TASKS_N8 | 1 | 7 |00:00:00.01 |
2|
-------------------------------------------------------------------------------------------------

3|

Query Block Name / Object Alias (identified by operation id):


------------------------------------------------------------1 - SEL$1
2 - SEL$1 / PROJ@SEL$1
3 - SEL$1 / PROJ@SEL$1
4 - SEL$1 / TASK@SEL$1
5 - SEL$1 / TASK@SEL$1
Outline Data
------------/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
OPT_PARAM('_b_tree_bitmap_plans' 'false')
OPT_PARAM('_fast_full_scan_enabled' 'false')
OPT_PARAM('_index_join_enabled' 'false')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "PROJ"@"SEL$1" ("PA_PROJECTS_ALL"."PROJECT_ID"))
INDEX_RS_ASC(@"SEL$1" "TASK"@"SEL$1" ("PA_TASKS"."PROJECT_ID"
"PA_TASKS"."PM_TASK_REFERENCE"))
LEADING(@"SEL$1" "PROJ"@"SEL$1" "TASK"@"SEL$1")
USE_NL(@"SEL$1" "TASK"@"SEL$1")
END_OUTLINE_DATA
*/
Predicate Information (identified by operation id):
--------------------------------------------------2 - filter((NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE(' 1900-01-01 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@!)))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)

)$ - /0

))* 4
 *) /  
/789:%;<!(:7= = 7-- - >( 5 700 ?

PLAN_TABLE_OUTPUT
SQL_ID byc2atjb80w2z, child number 0
------------------------------------SELECT /* bambo*/ TASK.TASK_NAME, TASK.TASK_NUMBER, PROJ.SEGMENT1,
PROJ.NAME FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001 AND TRUNC (SYSDATE) BETWEEN NVL
(PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE ('01-01-1900', 'MM-DD-YYYY')
)

AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,


TRUNC (SYSDATE)
)

AND TASK.PROJECT_ID = PROJ.PROJECT_ID

Plan hash value: 3336623817


-------------------------------------------------------| Id | Operation

| Name

-------------------------------------------------------| 0 | SELECT STATEMENT


| 1 | NESTED LOOPS

|
|

|
|

|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL |


|* 3 |

INDEX UNIQUE SCAN

| PA_PROJECTS_U1 |

| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS


|* 5 |

INDEX RANGE SCAN

| PA_TASKS_N8

-------------------------------------------------------Cont

Predicate Information (identified by operation id):


--------------------------------------------------2 - filter((NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE('
1900-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@
!
)))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)
Note
----- Warning: basic plan statistics not available. These are only collected when:
* hint 'gather_plan_statistics' is used for the statement or
* parameter 'statistics_level' is set to 'ALL', at session or system level

)$ - /0 1 . 2 345 6*2) ** *  43


PLAN_TABLE_OUTPUT
SQL_ID 7quur9z2hcc8b, child number 0
------------------------------------SELECT /* bambo*/ /*+ GATHER_PLAN_STATISTICS */ TASK.TASK_NAME, TASK.TASK_NUMBER,
PROJ.SEGMENT1, PROJ.NAME FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001 AND TRUNC (SYSDATE) BETWEEN NVL
(PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE
('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC
(SYSDATE)
) AND TASK.PROJECT_ID = PROJ.PROJECT_ID
Plan hash value: 3336623817
------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Starts | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 1 | 7 |00:00:00.01 |
6|
| 1 | NESTED LOOPS
|
| 1 | 7 |00:00:00.01 |
6|
|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL | 1 | 1 |00:00:00.01 |
|* 3 | INDEX UNIQUE SCAN
| PA_PROJECTS_U1 | 1 | 1 |00:00:00.01 |
2|
| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS
| 1 | 7 |00:00:00.01 |
3|
|* 5 | INDEX RANGE SCAN
| PA_TASKS_N8 | 1 | 7 |00:00:00.01 |
2|
-------------------------------------------------------------------------------------------------

3|

Predicate Information (identified by operation id):


--------------------------------------------------2 - filter((NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE(' 1900-01-01 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@!)))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)

)$ - /0

m
m

SELECT *
FROM TABLE (DBMS_XPLAN.DISPLAY_CURSOR ('d5k3znj9dfaw3', NULL, 'allstats last -rows +alias +outline

PLAN_TABLE_OUTPUT

SQL_ID 1fd86xmu1swwt, child number 0


------------------------------------SELECT /* saboo */ TASK.TASK_NAME, TASK.TASK_NUMBER, PROJ.SEGMENT1,
PROJ.NAME FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001 AND TRUNC (SYSDATE) BETWEEN NVL
(PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE ('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC (SYSDATE)
) AND TASK.PROJECT_ID = PROJ.PROJECT_ID

m
m
m
m
m
m
m
m
m
m
m

Plan hash value: 3336623817

m
m
m
m
m
m
m
m
m
m
m

-------------------------------------------------------| Id | Operation
| Name
|
-------------------------------------------------------| 0 | SELECT STATEMENT
|
|
| 1 | NESTED LOOPS
|
|
|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL |
|* 3 | INDEX UNIQUE SCAN
| PA_PROJECTS_U1 |
| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS
|
|* 5 | INDEX RANGE SCAN
| PA_TASKS_N8 |
--------------------------------------------------------

m
m
m

Query Block Name / Object Alias (identified by operation id):


-------------------------------------------------------------

m
m
m
m

1 - SEL$1
2 - SEL$1 / PROJ@SEL$1
3 - SEL$1 / PROJ@SEL$1
4 - SEL$1 / TASK@SEL$1

+predicate')) ;

Outline Data
------------/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
OPT_PARAM('_b_tree_bitmap_plans' 'false')
OPT_PARAM('_fast_full_scan_enabled' 'false')
OPT_PARAM('_index_join_enabled' 'false')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "PROJ"@"SEL$1" ("PA_PROJECTS_ALL"."PROJECT_ID"))
INDEX_RS_ASC(@"SEL$1" "TASK"@"SEL$1" ("PA_TASKS"."PROJECT_ID"
"PA_TASKS"."PM_TASK_REFERENCE"))
LEADING(@"SEL$1" "PROJ"@"SEL$1" "TASK"@"SEL$1")
USE_NL(@"SEL$1" "TASK"@"SEL$1")
END_OUTLINE_DATA
*/
Predicate Information (identified by operation id):
--------------------------------------------------2 - filter((NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE('
1900-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@!
)))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)
Note
----- Warning: basic plan statistics not available. These are only collected when:
* hint 'gather_plan_statistics' is used for the statement or
* parameter 'statistics_level' is set to 'ALL', at session or system level

)$ - /0 1 . 2 345 6*2) ** *  43


PLAN_TABLE_OUTPUT
SQL_ID 35d4cm4a53kd2, child number 0
------------------------------------SELECT /* saboo */ /*+ GATHER_PLAN_STATISTICS */ TASK.TASK_NAME, TASK.TASK_NUMBER,
PROJ.SEGMENT1, PROJ.NAME FROM PA.PA_PROJECTS_ALL PROJ, PA.PA_TASKS TASK WHERE 1 = 1
AND PROJ.PROJECT_ID = 1001 AND TRUNC (SYSDATE) BETWEEN NVL
(PROJ.TEMPLATE_START_DATE_ACTIVE,
TO_DATE
('01-01-1900', 'MM-DD-YYYY')
)
AND NVL (PROJ.TEMPLATE_END_DATE_ACTIVE,
TRUNC
(SYSDATE)
) AND TASK.PROJECT_ID = PROJ.PROJECT_ID
Plan hash value: 3336623817
------------------------------------------------------------------------------------------------| Id | Operation
| Name
| Starts | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 1 | 7 |00:00:00.01 |
6|
| 1 | NESTED LOOPS
|
| 1 | 7 |00:00:00.01 |
6|
|* 2 | TABLE ACCESS BY INDEX ROWID| PA_PROJECTS_ALL | 1 | 1 |00:00:00.01 |
|* 3 | INDEX UNIQUE SCAN
| PA_PROJECTS_U1 | 1 | 1 |00:00:00.01 |
2|
| 4 | TABLE ACCESS BY INDEX ROWID| PA_TASKS
| 1 | 7 |00:00:00.01 |
3|
|* 5 | INDEX RANGE SCAN
| PA_TASKS_N8 | 1 | 7 |00:00:00.01 |
2|
-------------------------------------------------------------------------------------------------

3|

Query Block Name / Object Alias (identified by operation id):


------------------------------------------------------------1 - SEL$1
2 - SEL$1 / PROJ@SEL$1
3 - SEL$1 / PROJ@SEL$1
4 - SEL$1 / TASK@SEL$1
5 - SEL$1 / TASK@SEL$1

Cont

Outline Data
------------/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
OPT_PARAM('_b_tree_bitmap_plans' 'false')
OPT_PARAM('_fast_full_scan_enabled' 'false')
OPT_PARAM('_index_join_enabled' 'false')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "PROJ"@"SEL$1" ("PA_PROJECTS_ALL"."PROJECT_ID"))
INDEX_RS_ASC(@"SEL$1" "TASK"@"SEL$1" ("PA_TASKS"."PROJECT_ID"
"PA_TASKS"."PM_TASK_REFERENCE"))
LEADING(@"SEL$1" "PROJ"@"SEL$1" "TASK"@"SEL$1")
USE_NL(@"SEL$1" "TASK"@"SEL$1")
END_OUTLINE_DATA
*/
Predicate Information (identified by operation id):
--------------------------------------------------2 - filter((NVL("PROJ"."TEMPLATE_START_DATE_ACTIVE",TO_DATE(' 1900-01-01 00:00:00',
'syyyy-mm-dd hh24:mi:ss'))<=TRUNC(SYSDATE@!) AND
NVL("PROJ"."TEMPLATE_END_DATE_ACTIVE",TRUNC(SYSDATE@!))>=TRUNC(SYSDATE@!)))
3 - access("PROJ"."PROJECT_ID"=1001)
5 - access("TASK"."PROJECT_ID"=1001)

Anda mungkin juga menyukai