Below is my query. limit 0,5000 and running without limit clause for all records (287,795) takes same time 9.5 seconds. I have to repeat this query for 57 times with increasing limit ranges likewise (0,5000), (5000,10000). So time is very critical.
Could you suggest any method to increase the speed. In sql performance increase or any strategical change.
I have removed below inner join for testing prepose then tacked less than 1 second. But the join is required. Because i have to check
"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;
Strategical change or sql query performance improvement