Tuning of SQL Statements: Execution Plans

1  SQL_ID  41v45z3dtqa2s, child number 0                                                         
2  -------------------------------------                                                         
3  select * from CUSTOMERS C, ORDERS O WHERE O.CUSTOMER_ID = C.CUSTOMER_ID                       
4  -- join predicate AND C.customer_id = :v1 -- filter predicate and                             
5  O.order_status = 'PENDING' --filter predicate order by order_date --                          
6  sorting                                                                                       
7                                                                                                
8  Plan hash value: 3311696933                                                                   
9                                                                                                
10 ----------------------------------------------------------------------------------------------
11 | Id  | Operation                     | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
12 ----------------------------------------------------------------------------------------------
13 |   0 | SELECT STATEMENT              |              |       |       |     8 (100)|          |
14 |   1 |  SORT ORDER BY                |              |     8 |  1560 |     8  (13)| 00:00:01 |
15 |   2 |   NESTED LOOPS                |              |     8 |  1560 |     7   (0)| 00:00:01 |
16 |   3 |    TABLE ACCESS BY INDEX ROWID| CUSTOMERS    |     1 |   150 |     2   (0)| 00:00:01 |
17 |*  4 |     INDEX UNIQUE SCAN         | CUSTOMERS_PK |     1 |       |     1   (0)| 00:00:01 |
18 |*  5 |    TABLE ACCESS BY INDEX ROWID| ORDERS       |     8 |   360 |     5   (0)| 00:00:01 |
19 |*  6 |     INDEX RANGE SCAN          | CUSTOMER_IDX |    16 |       |     2   (0)| 00:00:01 |
20 ----------------------------------------------------------------------------------------------
21                                                                                               
22 Peeked Binds (identified by position):                                                        
23 --------------------------------------                                                        
24                                                                                               
25    1 - :V1 (NUMBER): 1001                                                                     
26                                                                                               
27 Predicate Information (identified by operation id):                                           
28 ---------------------------------------------------                                           
29                                                                                               
30    4 - access("C"."CUSTOMER_ID"=:V1)                                                          
31    5 - filter("O"."ORDER_STATUS"='PENDING')                                                   
32    6 - access("O"."CUSTOMER_ID"=:V1)                                                          

                                       

--
-- Detaillierteren Ausf�hrungsplan ermitteln:
--

SQL_ID  d64pskw2p2qmd, child number 0                                                                                              
-------------------------------------                                                                                              
select /*+ GATHER_PLAN_STATISTICS */ * from CUSTOMERS C, ORDERS O WHERE                                                            
O.CUSTOMER_ID = C.CUSTOMER_ID -- join predicate AND C.customer_id = :v1                                                            
-- filter predicate and O.order_status = 'PENDING' --filter predicate                                                              
order by order_date -- sorting                                                                                                     
                                                                                                                                   
Plan hash value: 3311696933                                                                                                        
                                                                                                                                   
-----------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name         | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |              |      1 |        |      1 |00:00:00.65 |   22300 |       |       |          |
|   1 |  SORT ORDER BY                |              |      1 |      8 |      1 |00:00:00.65 |   22300 |  2048 |  2048 | 2048  (0)|
|   2 |   NESTED LOOPS                |              |      1 |      8 |      1 |00:00:00.65 |   22300 |       |       |          |
|   3 |    TABLE ACCESS BY INDEX ROWID| CUSTOMERS    |      1 |      1 |      1 |00:00:00.01 |       3 |       |       |          |
|*  4 |     INDEX UNIQUE SCAN         | CUSTOMERS_PK |      1 |      1 |      1 |00:00:00.01 |       2 |       |       |          |
|*  5 |    TABLE ACCESS BY INDEX ROWID| ORDERS       |      1 |      8 |      1 |00:00:00.65 |   22297 |       |       |          |
|*  6 |     INDEX RANGE SCAN          | CUSTOMER_IDX |      1 |     16 |    700K|00:00:00.92 |    1467 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                   
Predicate Information (identified by operation id):                                                                                
---------------------------------------------------                                                                                
                                                                                                                                   
   4 - access("C"."CUSTOMER_ID"=:V1)                                                                                               
   5 - filter("O"."ORDER_STATUS"='PENDING')                                                                                        
   6 - access("O"."CUSTOMER_ID"=:V1)                                                                                               



--
-- Idee 1: Histogramme erzeugen
--

SQL_ID  d64pskw2p2qmd, child number 0                                                                                                       
-------------------------------------                                                                                                       
select /*+ GATHER_PLAN_STATISTICS */ * from CUSTOMERS C, ORDERS O WHERE                                                                     
O.CUSTOMER_ID = C.CUSTOMER_ID -- join predicate AND C.customer_id = :v1                                                                     
-- filter predicate and O.order_status = 'PENDING' --filter predicate                                                                       
order by order_date -- sorting                                                                                                              
                                                                                                                                            
Plan hash value: 1247841217                                                                                                                 
                                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name         | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |
--------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |              |      1 |        |      1 |00:00:00.50 |   21269 |  21264 |       |       |          |
|   1 |  SORT ORDER BY                |              |      1 |    348K|      1 |00:00:00.50 |   21269 |  21264 |  2048 |  2048 | 2048  (0)|
|   2 |   NESTED LOOPS                |              |      1 |    348K|      1 |00:00:00.50 |   21269 |  21264 |       |       |          |
|   3 |    TABLE ACCESS BY INDEX ROWID| CUSTOMERS    |      1 |      1 |      1 |00:00:00.01 |       3 |      3 |       |       |          |
|*  4 |     INDEX UNIQUE SCAN         | CUSTOMERS_PK |      1 |      1 |      1 |00:00:00.01 |       2 |      2 |       |       |          |
|*  5 |    TABLE ACCESS FULL          | ORDERS       |      1 |    348K|      1 |00:00:00.50 |   21266 |  21261 |       |       |          |
--------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                            
Peeked Binds (identified by position):                                                                                                      
--------------------------------------                                                                                                      
                                                                                                                                            
   1 - (NUMBER): 1001                                                                                                                       
                                                                                                                                            
Predicate Information (identified by operation id):                                                                                         
---------------------------------------------------                                                                                         
                                                                                                                                            
   4 - access("C"."CUSTOMER_ID"=:V1)                                                                                                        
   5 - filter(("O"."ORDER_STATUS"='PENDING' AND "O"."CUSTOMER_ID"=:V1))                                                                     
                                                                                                                                                                   
--
-- Idee 3: Index auf order_status
-- 

SQL_ID  83ub7k219611h, child number 0                                                                                                             
-------------------------------------                                                                                                             
select /*+ GATHER_PLAN_STATISTICS */ * from CUSTOMERS C, ORDERS O where                                                                           
O.CUSTOMER_ID = C.CUSTOMER_ID and C.customer_id = :v1 and                                                                                         
O.order_status = 'PENDING' order by order_date                                                                                                    
                                                                                                                                                  
Plan hash value: 716330983                                                                                                                        
                                                                                                                                                  
--------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |
--------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                    |      1 |        |      1 |00:00:00.01 |       7 |      7 |       |       |          |
|   1 |  SORT ORDER BY                |                    |      1 |     16 |      1 |00:00:00.01 |       7 |      7 |  2048 |  2048 | 2048  (0)|
|   2 |   NESTED LOOPS                |                    |      1 |     16 |      1 |00:00:00.01 |       7 |      7 |       |       |          |
|   3 |    TABLE ACCESS BY INDEX ROWID| CUSTOMERS          |      1 |      1 |      1 |00:00:00.01 |       3 |      3 |       |       |          |
|*  4 |     INDEX UNIQUE SCAN         | CUSTOMERS_PK       |      1 |      1 |      1 |00:00:00.01 |       2 |      2 |       |       |          |
|   5 |    TABLE ACCESS BY INDEX ROWID| ORDERS             |      1 |     16 |      1 |00:00:00.01 |       4 |      4 |       |       |          |
|*  6 |     INDEX RANGE SCAN          | ORDERS_CUST_STATUS |      1 |     16 |      1 |00:00:00.01 |       3 |      3 |       |       |          |
--------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                                  
Peeked Binds (identified by position):                                                                                                            
--------------------------------------                                                                                                            
                                                                                                                                                  
   1 - (NUMBER): 1001                                                                                                                             
                                                                                                                                                  
Predicate Information (identified by operation id):                                                                                               
---------------------------------------------------                                                                                               
                                                                                                                                                  
   4 - access("C"."CUSTOMER_ID"=:V1)                                                                                                              
   6 - access("O"."ORDER_STATUS"='PENDING' AND "O"."CUSTOMER_ID"=:V1)    

No comments:

Post a Comment