优化,为什么 SQL 查询在 Oracle 数据库中运行很慢?

问题描述 投票:0回答:0

我有一个大约有 442,151,502 条记录的表。我有一个针对一个非常大的表运行的查询,该查询需要永远并且可能会进行全表扫描。这个查询非常非常慢!

SELECT DD.SYM_RUN_DATE,
       DD.BRANCH_NO AS BRANCH_NO,
       B.BRANCH_NAME,
       DD.LOAN_SUB_TYPE || ' - ' ||
       (SELECT S.LOAN_SUB_TYPE_DESC
          FROM KMDW.STA_CL_LOAN_SUB_TYPE S
         WHERE S.LOAN_SUB_TYPE = DD.LOAN_SUB_TYPE
           AND S.LOAN_TYPE = DD.LOAN_TYPE) MA_SP,
       DD.CLIENT_NO AS CLIENT_NO,
       C.CLIENT_NAME,
       DD.LOAN_NO AS LOAN_NO,
       DD.INT_RATE,
       DD.DRAWDOWN_NO,
       DD.DRAWDOWN_AMOUNT,
       DD.DD_DATE,
       DD.MATURITY,
       DD.OUTSTANDING_BASE,
       DD.CURRENCY_DD,
       DD.PROFIT_CENTRE,
       DD.CLIENT_STATUS,
       SN.SNG SO_NGAY_QH_LOAN,
       P.SUB_CODE SUB_CODE,
       P.SUB_DESC SUB_DESC,
       P.INFO_2,
       P.Info_1 ,
       P.Info_3,
       P.Info_5,
       DD.REVERSED_MATURED,
       dd.acct_exec,
       f.acct_exec_name,
       
       --added <04May2021>
       COLL.COLLAT_CODE,
       CC.COLLAT_REF,
       COLL.BRND_MODL,
       
       DD.Analysis_3, 
       UU.FTP_GROUP   
       
  FROM KMDW.FT_LOAN_DD_BALANCE_STATIC DD,
       (SELECT I.LOAN_NO, I.CLIENT_NO, P.*
          FROM KMDW.STA_VIB_CL_NEW_PROD P, KMDW.STA_VIB_CL_LOAN_INFOR I
         WHERE PROD_CODE in ( 'OTO','MOTO')
           AND P.SUB_CODE = nvl(I.INFOR_17,I.Infor_18)) P,
       (SELECT I.BORROWER,loan_no, MAX(NVL(I.SNG, 0)) SNG
          FROM KMDW.KM_CL_INVOICE I
         WHERE I.SYM_RUN_DATE = '31-mar-2023'
         GROUP BY BORROWER,loan_no) SN,
       KMDW.DM_CLIENT C,
       KMDW.DM_BRANCH B,
       kmdw.sta_fm_acct_exec f,

       --added <04May2021>
       (SELECT COLLAT_REF, REF_NO
          FROM KMDW.FT_COLL_POPUP CC
         WHERE SYM_RUN_DATE = '31-mar-2023') CC,
       (SELECT DISTINCT S.REFERENCE, S.COLLAT_CODE, V.BRND_MODL
          FROM KMDW.FT_COLLATERAL_STATIC S, KMDW.STA_FM_VEHICLE V
         WHERE S.REFERENCE = V.COLL_REF
           AND S.COLLAT_STATUS = 'A'
           AND S.SYM_RUN_DATE = '31-mar-2023') COLL,
       (select DEAL_NO,wm_concat(FTP_GROUP) AS FTP_GROUP
        FROM FTP_NEW.STA_VIB_FTP_GROUP_DEAL group by DEAL_NO) UU 
                  
 WHERE 1 = 1
   AND DD.SYM_RUN_DATE = '31-mar-2023'
   AND dd.acct_exec = f.acct_exec
   AND DD.CLIENT_NO = C.CLIENT_NO
   AND DD.CLIENT_NO = SN.BORROWER(+)
   AND DD.loan_no = SN.loan_no(+)
   AND DD.BRANCH_NO = B.BRANCH_NO
   --AND DD.BRANCH_NO = NVL(:IP_BRANCH, DD.BRANCH_NO)
   AND DD.VERIFY = 'Y'
   --AND NVL(DD.REVERSED_MATURED, 'N') NOT IN ('R', 'C', 'M')
   AND P.LOAN_NO = DD.LOAN_NO
   AND P.CLIENT_NO != '00103939'
   
   --added <04May2021>
   AND DD.LOAN_NO = CC.REF_NO(+)
   AND CC.COLLAT_REF = COLL.REFERENCE(+)
   AND DD.Loan_No = UU.DEAL_NO (+)
   
 ORDER BY DD.BRANCH_NO, DD.CLIENT_NO;

索引大表

CREATE INDEX FT_LOAN_BAL_IDX2 ON KMDW.FT_LOAN_DD_BALANCE_STATIC (SYM_RUN_DATE,LOAN_TYPE,LOAN_SUB_TYPE,BORROWER_TYPE);
CREATE UNIQUE INDEX FT_LOAN_BAL_STA_IDX1 ON KMDW.FT_LOAN_DD_BALANCE_STATIC (SYM_RUN_DATE,LOAN_NO,DRAWDOWN_NO);
CREATE INDEX FT_LOAN_BAL_STA_IDX2 ON KMDW.FT_LOAN_DD_BALANCE_STATIC (SYM_RUN_DATE,LOAN_NO,DRAWDOWN_NO,CLIENT_NO,BRANCH_NO);
CREATE INDEX FT_LOAN_BAL_STA_IDX3 ON KMDW.FT_LOAN_DD_BALANCE_STATIC (SYM_RUN_DATE);
CREATE INDEX FT_LOAN_BAL_STA_IDX4 ON KMDW.FT_LOAN_DD_BALANCE_STATIC (TRIAL_EXPIRED,LOAN_NO);
CREATE INDEX FT_LOAN_BAL_STA_IDX6 ON KMDW.FT_LOAN_DD_BALANCE_STATIC (LOAN_NO);

解释 SQL

PLAN_TABLE_OUTPUT                                                                                                                                    |
-----------------------------------------------------------------------------------------------------------------------------------------------------+
Plan hash value: 1344621840                                                                                                                          |
                                                                                                                                                     |
-----------------------------------------------------------------------------------------------------------------------------------------------------|
| Id  | Operation                                      | Name                       | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop ||
-----------------------------------------------------------------------------------------------------------------------------------------------------|
|   0 | SELECT STATEMENT                               |                            |     1 |  2412 |       | 80998   (3)| 00:01:22 |       |       ||
|   1 |  TABLE ACCESS BY INDEX ROWID                   | STA_CL_LOAN_SUB_TYPE       |     1 |    24 |       |     1   (0)| 00:00:01 |       |       ||
|*  2 |   INDEX RANGE SCAN                             | STA_CL_LOAN_SUB_TYPE_IDX1  |     1 |       |       |     1   (0)| 00:00:01 |       |       ||
|   3 |  SORT ORDER BY                                 |                            |     1 |  2412 |       | 80998   (3)| 00:01:22 |       |       ||
|*  4 |   HASH JOIN                                    |                            |     1 |  2412 |       | 80997   (3)| 00:01:22 |       |       ||
|   5 |    TABLE ACCESS BY INDEX ROWID                 | DM_CLIENT                  |     1 |    30 |       |     1   (0)| 00:00:01 |       |       ||
|   6 |     NESTED LOOPS                               |                            |     1 |  2333 |       | 80920   (3)| 00:01:22 |       |       ||
|   7 |      NESTED LOOPS                              |                            |     1 |  2303 |       | 80919   (3)| 00:01:22 |       |       ||
|*  8 |       HASH JOIN OUTER                          |                            |     1 |  2280 |       | 80918   (3)| 00:01:22 |       |       ||
|*  9 |        HASH JOIN OUTER                         |                            |     1 |   266 |       | 70500   (2)| 00:01:11 |       |       ||
|  10 |         NESTED LOOPS OUTER                     |                            |     1 |   206 |       | 54474   (1)| 00:00:55 |       |       ||
|  11 |          NESTED LOOPS                          |                            |     1 |   173 |       |   323   (8)| 00:00:01 |       |       ||
|* 12 |           HASH JOIN OUTER                      |                            |     1 |   150 |       |   322   (8)| 00:00:01 |       |       ||
|  13 |            TABLE ACCESS BY INDEX ROWID         | DM_BRANCH                  |     1 |    21 |       |     1   (0)| 00:00:01 |       |       ||
|  14 |             NESTED LOOPS                       |                            |     1 |   117 |       |     3   (0)| 00:00:01 |       |       ||
|* 15 |              TABLE ACCESS BY GLOBAL INDEX ROWID| FT_LOAN_DD_BALANCE_STATIC  |     1 |    96 |       |     2   (0)| 00:00:01 |    39 |    39 ||
|* 16 |               INDEX RANGE SCAN                 | FT_LOAN_BAL_STA_IDX3       |     1 |       |       |     1   (0)| 00:00:01 |       |       ||
|* 17 |              INDEX RANGE SCAN                  | DM_BRANCH_IDX1             |     1 |       |       |     1   (0)| 00:00:01 |       |       ||
|  18 |            VIEW                                |                            | 27748 |   894K|       |   316   (7)| 00:00:01 |       |       ||
|  19 |             HASH GROUP BY                      |                            | 27748 |   840K|  2416K|   316   (7)| 00:00:01 |       |       ||
|  20 |              TABLE ACCESS BY INDEX ROWID       | KM_CL_INVOICE              | 27748 |   840K|       |    56   (6)| 00:00:01 |       |       ||
|* 21 |               INDEX RANGE SCAN                 | KM_CL_INVOICE_ID1          | 27748 |       |       |    17   (6)| 00:00:01 |       |       ||
|  22 |           TABLE ACCESS BY INDEX ROWID          | STA_FM_ACCT_EXEC           |     1 |    23 |       |     1   (0)| 00:00:01 |       |       ||
|* 23 |            INDEX UNIQUE SCAN                   | STA_FM_ACCT_EXEC_PK        |     1 |       |       |     1   (0)| 00:00:01 |       |       ||
|* 24 |          TABLE ACCESS BY INDEX ROWID           | FT_COLL_POPUP              |     1 |    33 |       | 54151   (1)| 00:00:55 |       |       ||
|* 25 |           INDEX RANGE SCAN                     | FT_COLL_POPUP_IDX3         |   194K|       |       |   172   (6)| 00:00:01 |       |       ||
|  26 |         VIEW                                   |                            |   222K|    12M|       | 16010   (4)| 00:00:17 |       |       ||
|  27 |          HASH UNIQUE                           |                            |   222K|    11M|    25M| 16010   (4)| 00:00:17 |       |       ||
|* 28 |           HASH JOIN                            |                            |   222K|    11M|  8400K| 12964   (3)| 00:00:14 |       |       ||
|* 29 |            TABLE ACCESS BY GLOBAL INDEX ROWID  | FT_COLLATERAL_STATIC       |   220K|  5811K|       |  4536   (3)| 00:00:05 |    27 |    27 ||
|* 30 |             INDEX RANGE SCAN                   | FT_COLLATERAL_STATIC_IDX1  |   815K|       |       |   401  (10)| 00:00:01 |       |       ||
|  31 |            TABLE ACCESS FULL                   | STA_FM_VEHICLE             |   323K|  7902K|       |  5672   (2)| 00:00:06 |       |       ||
|  32 |        VIEW                                    |                            |   721K|  1386M|       | 10363   (8)| 00:00:11 |       |       ||
|  33 |         SORT GROUP BY                          |                            |   721K|    13M|    41M| 10363   (8)| 00:00:11 |       |       ||
|  34 |          TABLE ACCESS FULL                     | STA_VIB_FTP_GROUP_DEAL     |   829K|    15M|       |  5084   (4)| 00:00:06 |       |       ||
|* 35 |       TABLE ACCESS BY INDEX ROWID              | STA_VIB_CL_LOAN_INFOR      |     1 |    23 |       |     1   (0)| 00:00:01 |       |       ||
|* 36 |        INDEX RANGE SCAN                        | STA_VIB_CL_LOAN_INFOR_IDX1 |     1 |       |       |     1   (0)| 00:00:01 |       |       ||
|* 37 |      INDEX RANGE SCAN                          | DM_CLIENT_IDX1             |     1 |       |       |     1   (0)| 00:00:01 |       |       ||
|* 38 |    TABLE ACCESS FULL                           | STA_VIB_CL_NEW_PROD        |   342 | 27018 |       |    77   (3)| 00:00:01 |       |       ||
-----------------------------------------------------------------------------------------------------------------------------------------------------|
                                                                                                                                                     |
Predicate Information (identified by operation id):                                                                                                  |
---------------------------------------------------                                                                                                  |
                                                                                                                                                     |
   2 - access("S"."LOAN_TYPE"=:B1 AND "S"."LOAN_SUB_TYPE"=:B2)                                                                                       |
   4 - access("P"."SUB_CODE"=NVL("I"."INFOR_17","I"."INFOR_18"))                                                                                     |
   8 - access("DD"."LOAN_NO"="UU"."DEAL_NO"(+))                                                                                                      |
   9 - access("COLLAT_REF"="COLL"."REFERENCE"(+))                                                                                                    |
  12 - access("DD"."CLIENT_NO"="SN"."BORROWER"(+) AND "DD"."LOAN_NO"="SN"."LOAN_NO"(+))                                                              |
  15 - filter("DD"."VERIFY"='Y')                                                                                                                     |
  16 - access("DD"."SYM_RUN_DATE"=TO_DATE(' 2023-03-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))                                                         |
  17 - access("DD"."BRANCH_NO"="B"."BRANCH_NO")                                                                                                      |
  21 - access("I"."SYM_RUN_DATE"=TO_DATE(' 2023-03-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))                                                          |
  23 - access("DD"."ACCT_EXEC"="F"."ACCT_EXEC")                                                                                                      |
  24 - filter("DD"."LOAN_NO"="REF_NO"(+))                                                                                                            |
  25 - access("SYM_RUN_DATE"(+)=TO_DATE(' 2023-03-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))                                                           |
  28 - access("S"."REFERENCE"="V"."COLL_REF")                                                                                                        |
  29 - filter("S"."COLLAT_STATUS"='A')                                                                                                               |
  30 - access("S"."SYM_RUN_DATE"=TO_DATE(' 2023-03-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))                                                          |
  35 - filter("I"."CLIENT_NO"<>'00103939')                                                                                                           |
  36 - access("I"."LOAN_NO"="DD"."LOAN_NO")                                                                                                          |
  37 - access("DD"."CLIENT_NO"="C"."CLIENT_NO")                                                                                                      |
  38 - filter("PROD_CODE"='MOTO' OR "PROD_CODE"='OTO')                                                                                               |

您能否指导我如何更改查询以获得更好的性能?任何帮助将不胜感激。

performance oracle10g
© www.soinside.com 2019 - 2024. All rights reserved.