以下查詢正在執行約30秒。我無法找到瓶頸。請幫助我提高性能。使用左連接優化查詢
SELECT 'Beginning Balance' AS TYPE,
COUNT(DISTINCT lmt.lmt_corp_id) ,
COUNT(DISTINCT ldt.ldt_clnt_id) ,
COUNT(DISTINCT ldt.ldt_guar_id) ,
COUNT(DISTINCT ldt.ldt_loan_ref_id),
COUNT(ldt.ldt_line_item_id) ,
SUM(ldt.ldt_princpal_bal) ,
SUM(ldt.ldt_fund_amt),
SUM(ldt.ldt_princpal_bal) - SUM(ldt.ldt_fund_amt),
SUM(pay.PaidPrinc),
SUM(pay.PaidInt),
SUM(pay.PaidOther),
SUM(pay.TotalPmt),
SUM(fn_get_line_pb_by_date(ldt.ldt_line_item_id, '2014-01-16', 'BOD')),
sum(ovr.OPAmt),
FROM ldt_tran_loan_det ldt
JOIN lmt_mst_loan lmt
ON ldt.ldt_loan_ref_id = lmt.lmt_loan_id AND
ldt.ldt_clnt_id IN (262,75,191,49,267,277,23,79)
LEFT JOIN tmp_pmt pay ON pay.LineItemId = ldt.ldt_line_item_id
LEFT JOIN tmp_over_pmt ovr ON ovr.LineItemId = ldt.ldt_line_item_id
LEFT JOIN lct_tran_loan_close lct
ON lct.lct_line_item_id = ldt.ldt_line_item_id
WHERE DATE(ldt.ldt_funded_date) < '2014-01-16' AND
(ldt.ldt_status != 'PIF' OR
(ldt.ldt_status = 'PIF' AND ldt.ldt_last_pmt_date >= '2014-01-16')) AND
(lct.lct_hff_entry_date IS NULL OR
(DATE(lct.lct_hff_entry_date) >= '2014-01-16' AND
lct.lct_txn_type IN ('REC','RCL')))
DDL:
CREATE TABLE `ldt_tran_loan_det`
(`ldt_line_item_id` bigint(20),
`ldt_loan_ref_id` int(11) ,
`ldt_clnt_id` int(11) ,
`ldt_guar_id` int(11) ,
`ldt_princpal_bal` decimal(20,2) ,
`ldt_fund_amt` decimal(20,2) ,
`ldt_funded_date` datetime ,
`ldt_last_pmt_date` date ,
PRIMARY KEY (`ldt_line_item_id`));
CREATE TABLE `lmt_mst_loan` (`lmt_loan_id` int(11), `lmt_corp_id` int(11));
CREATE TABLE `tmp_pmt`
(`PaidPrinc` decimal(20,2),
`PaidInt` decimal(20,2),
`PaidOther` decimal(20,2),
`TotalPmt` decimal(20,2),
`LineItemId` int(11));
CREATE TABLE `tmp_over_pmt` (`OPAmt` decimal(20,2),`LineItemId` int(11));
CREATE TABLE `lct_tran_loan_close`
(`lct_line_item_id` bigint(20),
`lct_txn_type`char(20) ,
`lct_hff_entry_date` datetime);
下面是執行計劃:
您的數據庫統計數據是否是最新的 - 除了lmt_mst_loan之外,您的所有表格是否真的只有1或2條記錄?如果不是,請嘗試更新數據庫統計信息。 –
感謝您的評論。是的,我已經優化了我的桌子,但仍然需要同一時間。我的表中有超過30萬條記錄。 –
你可以發佈更新的執行計劃嗎? –