请教这个sql怎么优化,现在运行时间大概8秒多

解决方案 »

  1.   

    EXPLAIN SELECT
    zm.xfdc_index,
    sum(ald.encash_amt) / 100 - sum(
    arld.paid_prin_amt + arld.paid_ovd_prin_amt
    ) / 100
    FROM
    cm_zm_das_info zm,
    ants_loan_detail ald LEFT JOIN
    (
    SELECT
    contract_no,
    business_date,
    sum(paid_prin_amt) AS paid_prin_amt,
    sum(paid_ovd_prin_amt) AS paid_ovd_prin_amt
    FROM
    ants_repay_loan_detail
    WHERE
    business_date <= '2019-02-28'
    GROUP BY
    contract_no
    ) arld ON ald.contract_no = arld.contract_no
    WHERE
    ald.business_date <= '2019-02-28'
    AND zm.ic_number = ald.cert_no
    GROUP BY
    zm.xfdc_index
    order by null ;
      

  2.   

    这么看语句的提升空间不大,你可以增加2个索引试试看。
    ants_loan_detail(cert_no,business_date);
    ants_repay_loan_detail(business_date,contract_no);
      

  3.   

    select * from a left join b on b.id = a.id where a.id = ? ;
    以上语句,on后边的内容,不会走a表的索引。where后的条件,才可以能会走a表的索引。