我有一個相當長的(10個表,每個約60K條記錄)查詢,所有這些表都使用左連接進行連接,因爲它們可以包含空值(全部)。改進/優化SQL Server中的LEFT JOIN
我看到一個巨大的性能打擊,我追蹤到這一點的代碼。
SELECT *
FROM MAIN_TABLE d
LEFT JOIN INSURANCES i on i.IMREDEM_CODE = d.IMREDEM_CODE
and i.INS_TERMINATIONDATE IS NULL
and INS_RANK = 0
and i.IMREINS_CODE = (SELECT TOP 1 IMREINS_CODE
from INSURANCES i2
WHERE i2.IMREDEM_CODE = i.IMREDEM_CODE
and i2.INS_TERMINATIONDATE IS NULL
and i2.INS_RANK = 0
ORDER BY TAG_SYSTEMDATE DESC)
基本上什麼,我需要做的是,保險表可以包含0或者多條記錄,因爲當他們更新保險它執行插入不爲審計目的的更新。所以我必須在左邊加入兩次表格。此外,我需要爲主保險和第二保險兩次執行此查詢(主要級別= 0,次級級別= 1。IMREDEM_CODE是D表和FK的I表
答案在這裏:
left join INSURANCES i on i.IMREDEM_CODE = d.IMREDEM_CODE
and i.IMREINS_CODE = (SELECT max(imreins_code) FROM INSURANCES i2 WHERE i2.IMREDEM_CODE = i.IMREDEM_CODE and i2.INS_TERMINATIONDATE IS NULL and i2.INS_RANK = 0)
http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/ –
你對保險有哪些指標表? – Laurence