优化SQL一条(一)

2014-11-23 22:21:09 · 作者: · 浏览: 73

昨天大半夜接到一条SQL,反应说很慢,我非常愤怒,经过询问,三个月才需要跑这个SQL一次,你tm非要在马上法定节假日了 跑它吗?

SQL如下(巨长无比)

select * from table(dbms_xplan.display_cursor(lower('0ah5a8dbk28fh'))); 

PLAN_TABLE_OUTPUT 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
SQL_ID  0ah5a8dbk28fh, child number 0 
------------------------------------- 
INSERT INTO END_TRANS_ACCOUNT( BRANCH_NO ,COST_CENTER ,CNTR_NO ,IPSN_NO 
,POL_CODE ,ACCOUNT_NO ,I_INFO_GROUP_FLAG ,SG_NO ,CURRENCY_CODE 
,VALID_DATE ,CNTR_STAT ,INVALID_DATE ,ENDORSE_STAT ,REDUCE_START_DATE 
,GROUP_FLAG ,SET_STAT ,FREEZE_STAT ,DEAD_DATE ,DEAD_CODE ,MED_DATE 
,ADJ_STOP_CAUSE ,ADJ_STOP_DATE ,DUTY_STOP_DATE ,IPSN_AGE ,IPSN_SEX 
,IPSN_NUM ,I_INFO_PAY_ITRVL ,I_INFO_PAY_DUR ,I_INFO_PREM 
,I_INFO_INSUR_DUR ,FACE_AMNT ,EXPIRY_AMNT ,SUM_ASS_AMNT ,FEE_ITRVL 
,REV_GRNT ,REV_GRNT_RATE ,RIDER_INFO ,RIDER1_CNTR_NO ,RIDER2_CNTR_NO 
,RIDER3_CNTR_NO ,RIDER1_SA ,RIDER2_SA ,ACCOUNT_V_B ,ACCOUNT_V_E 
,BONUS_RATIO ,CLAIM_FLAG ,PREM_PAID_NUM ,LAST_PREM_DATE ,LAST_PREM 
,YEAR_PREM_SG ,YEAR_PREM_RG ,FTP_PREM ,SUM_PREM ,OCC_AMNT ,PALBD_AMNT 
,FEE_INCOME ,FEE_INCOME_TOTAL ,BONUS_PERSISTENCY 
,BONUS_PERSISTENCY_TOTAL ,BONUS_CREDITED ,INV_GRNT_RATE 
,BONUS_REV_ITRVL ,BONUS_SUM ,BONUS_AMNT ,PAID_AMNT ,PAID_ANN_AMNT 
,PAID_DEATH_AMNT ,PAID_DIS_AMNT ,PAID_MED_AMNT ,PAID_MED_REIMB 
,PAID_EXP_AMNT ,PAID_GRANT_AMNT , 

Plan hash value: 2746060288 

--------------------------------------------------------------------------------------------------------------------------------- 
| Id  | Operation                                 | Name                        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | 
--------------------------------------------------------------------------------------------------------------------------------- 
|   0 | INSERT STATEMENT                          |                             |       |       |       |  2581K(100)|          | 
|   1 |  LOAD TABLE CONVENTIONAL                  |                             |       |       |       |            |          | 
|   2 |   UNION-ALL                               |                             |       |       |       |            |          | 
|   3 |    NEST
ED LOOPS OUTER | | 8 | 1264 | | 24 (17)| 00:00:01 | |* 4 | HASH JOIN OUTER | | 8 | 912 | | 24 (17)| 00:00:01 | |* 5 | HASH JOIN OUTER | | 8 | 840 | | 20 (15)| 00:00:01 | |* 6 | HASH JOIN OUTER | | 8 | 744 | | 17 (18)| 00:00:01 | |* 7 | HASH JOIN OUTER | | 8 | 648 | | 13 (16)| 00:00:01 | |* 8 | HASH JOIN OUTER | | 8 | 552 | | 10 (20)| 00:00:01 | | 9 | MERGE JOIN OUTER | | 8 | 456 | | 6 (17)| 00:00:01 | | 10 | TABLE ACCESS BY INDEX ROWID | PRE_INSUR_APPL | 8 | 360 | | 2 (0)| 00:00:01 | | 11 | INDEX FULL SCAN | PRIMARY_KEY | 8 | | | 1 (0)| 00:00:01 | |* 12 | SORT JOIN | | 8 | 96 | | 4 (25)| 00:00:01 | | 13 | TABLE ACCESS FULL | TMP_FACE_AMNT_APPLID | 8 | 96 | | 3 (0)| 00:00:01 | | 14 | TABLE ACCESS FULL | TMP_ACCOUNT_V_E_APPLID | 8 | 96 | | 3 (0)| 00:00:01 | | 15 | TABLE ACCESS FULL | TMP_YEAR_PREM_RG_APPLID | 8 | 96 | | 3 (0)| 00:00:01 | | 16 | TABLE ACCESS FULL | TMP_YEAR_PREM_SG_APPLID | 8 | 96 | | 3 (0)| 00:00:01 | | 17 | TABLE ACCESS FULL | TMP_SUM_PRE_APPLID | 8 | 96 | | 3 (0)| 00:00:01 | | 18 | TABLE ACCESS FULL | TMP_INSUR_DUR_APPLID | 8 | 72 | | 3 (0)| 00:00:01 | | 19 | TABLE ACCESS BY INDEX ROWID | TMP_COST_CENTER_CNTRNO | 1 | 44 | | 0 (0)| | |* 20 | INDEX UNIQUE SCAN | KEY_COST_CENTER_CNTRNO | 1 | | | 0 (0)| | |* 21 | HASH JOIN RIGHT OUTER | | 4326K| 1390M| | 613K (2)| 02:02:48 | | 22 | TABLE ACCESS FULL | TMP_COST_CENT