【发布时间】:2022-11-14 08:11:20
【问题描述】:
以下是我的查询。所有记录 (287,795) 的限制 0,5000 和不带限制子句的运行需要相同的时间 9.5 秒。我必须重复此查询 57 次,同时增加限制范围(0,5000),(5000,10000)。所以时间非常关键。
您能否提出任何提高速度的方法。在 sql 性能提高或任何战略性变化。
我已删除低于内连接用于测试前置然后添加不到 1 秒.但加入是必需的。因为我必须检查
"APDMD.DAYS_TO_DEMAND_ARREARS" is within CC.FROM_DPD & CC.TO_DPD
below is table CC
SELECT COALESCE ( APDMD.DMS_SOL_ID, '--' ) AS SOL_ID,
COALESCE ( APDMD.ACID, '--' ) AS ACCOUNT_NO,
COALESCE ( APDMD.CUST_ID, '--' ) AS CUSTOMER_ID,
COALESCE ( APDMD.ACCT_NAME, '--' ) AS CUSTOMER_NAME,
COALESCE ( APDMD.SCHM_CODE, '--' ) AS SCHEME_CODE,
COALESCE ( APDMD.SANCT_LIM, 0 ) AS SANCTION_LIMIT,
COALESCE ( APDMD.CLR_BAL_AMT, 0 ) AS OS_BALANCE,
COALESCE ( APDMD.CAP_OVER_DUE, 0 ) AS CAPITAL_ARREARS,
COALESCE ( APDMD.INT_OVER_DUE, 0 ) AS INTEREST_ARREARS,
COALESCE ( APDMD.ACCT_CRNCY_CODE, '--' ) AS CURRANCY_CODE,
COALESCE ( APDMD.ACCT_MGR_USER_ID, '--' ) AS ACCOUNT_MANAGER,
COALESCE ( CC.STAGE, '--' ) AS STAGECLASSIFICATION,
COALESCE ( CC.SUB_CLASSIFICATION, '--' ) AS classification,
COALESCE ( APDMD.ARRMONTHS, 0 ) AS MONTH_ARREARS,
COALESCE ( APDMD.ARRDAYS, 0) AS DAYS_ARREARS, APDMD.NPA_DATE AS NPADATE,
COALESCE ( APDMD.LOCATION_CODE, '--' ) AS LOCATION_CODE,
COALESCE ( APDMD.GL_SUB_HEAD_CODE, '--' ) AS GL_SUB_HEAD_CODE,
COALESCE ( APDMD.IIS_LKR, 0 ) AS IIS_LKR,
COALESCE ( APDMD.SP_PROVISION, 0 ) AS SP_PROVISION,
COALESCE ( APDMD.SP_PROVISION_LKR, 0 ) AS SP_PROVISION_LKR,
COALESCE ( APDMD.BSC_TEAM_LEADER, 0 ) AS BSC_TEAM_LEADER,
APDMD.ACCT_OPN_DATE AS ACCT_OPN_DATE,
( SELECT SUM( AA.CLR_BAL_AMT ) FROM app_dms_daily AA WHERE AA.CUST_ID = CUSTOMER_ID ) AS PORTPOLIO,
COALESCE ( ( SELECT TKTH.resolutiondescription FROM tickethistory TKTH WHERE TKTH.tickethistoryid = (SELECT MAX( TH.TICKETHISTORYID ) FROM tickethistory TH WHERE TH.TICKETID = T.TICKETID )
), '--' ) AS REMARKS,
COALESCE ( DWH_MOBILE_NO, '--' ) AS MOBILENO,
COALESCE(APDMD.MORATORIUM_GIVEN, '--') AS MORATORIUM_GRANTED,
COALESCE(APDMD.MORATORIUM_PERIOD, '--') AS MORATORIUM_PERIOD
FROM app_dms_daily APDMD
#adding below increase 9s ---> 9*50 --> 7.5 min
INNER JOIN classification_configuration CC ON CASE
WHEN CC.FROM_DPD IS NULL
THEN APDMD.DAYS_TO_DEMAND_ARREARS <= CC.TO_DPD
WHEN CC.FROM_DPD AND CC.TO_DPD IS NOT NULL
THEN APDMD.DAYS_TO_DEMAND_ARREARS >= CC.FROM_DPD AND APDMD.DAYS_TO_DEMAND_ARREARS <= CC.TO_DPD
WHEN CC.TO_DPD IS NULL
THEN APDMD.DAYS_TO_DEMAND_ARREARS >= CC.FROM_DPD ELSE '' END
LEFT OUTER JOIN ticket T ON T.ACCID = APDMD.ACID
ORDER BY
DMS_SOL_ID,
OS_BALANCE ASC
LIMIT 0,5000;
战略变更或 sql 查询性能改进
【问题讨论】:
-
用
APDMD.CLR_BAL_AMT替换(在ORDER BY中)OS_BALANCE可以吗?
标签: mysql query-optimization inner-join limit