0
我們在SQL Server 2008 R2中查詢性能方面存在問題。查詢連接來自2個數據庫的表格,其中一個是我們的數據集市從iSeries系統獲取數據,另一個是我們的主要報告系統。通過加入殺死SQL查詢的性能
在下面的查詢中,我們應該在30秒內得到90939條記錄。如果我們刪除PO.POwner列,結果會在大約10秒後回來。
但是,當我們添加po.POwner列時,它正在殺死它。
SELECT cu.* ,C4.C4IND, cu.CUS_Citizenship as [Country of Incorporation],
cu.CUS_Nationality as [Residence Country],[FirstParticipantID]=ISNULL(po.POwner,cu.CUS_No)
-- , cu.CUS_No COLLATE Latin1_General_CS_AS, po.POwner COLLATE Latin1_General_CS_AS
FROM dbo.CustomerData cu
left outer join Hermes_Import.dbo.KFILDTO_C4PF C4
on cu.CUS_Type COLLATE Latin1_General_CS_AS =C4.C4CTP COLLATE Latin1_General_CS_AS
OUTER APPLY (
SELECT TOP 1
CASE WHEN GFCTP = 'GG' AND LEN(Y41SCV) > 5 THEN Y41SCV ELSE Y41CUS END AS 'POwner',
GFCTP
FROM Hermes_Import.dbo.KFILDTO_Y41PF
INNER JOIN Hermes_Import.dbo.KFILDTO_GFPF ON GFCUS = Y41CUS
WHERE Y41TYP IN ('BN', 'BB', 'CO') AND Y41DEL = 0 AND Y41DEC = 0
AND Y41CUS COLLATE Latin1_General_CS_AS = cu.CUS_No COLLATE Latin1_General_CS_AS
) po
WHERE Left(Cu.[Cus_No],1)< '8' AND (cu.[CUS_Type])<>'ZA' AND DataDate='2014-04-30' ORDER BY CUS_No
以下是一個執行計劃(就是上面的3000條記錄):
當我們拿出的主要所有者列中,我們得到的所有結果在大約11秒,這裏是執行計劃:
我們能做些什麼不同,以獲得主要所有者,銘記我們要達到6個可能participanst的在客戶的第一條記錄佔
您好,感謝尋找,但我們不能創建這些表的索引,因爲這將有隔夜刷新過程的影響納入Hermes_Import - 我們銘記的影響索引表可能對其他功能可能被使用表 –
也,是的,你說得對,我們將在'OUTER APPLY'子句中添加'ORDER BY'後,我們發現我們的問題 - 我們正朝着把參考的一個子集的表到我們的報告系統,因爲我們扶着只能每月運行一次以生成BASEL報告文件。 –
@Philip:你究竟擔心桌子會受到什麼影響?他們那麼大,寫得很重嗎?如果沒有索引,您在該查詢中將無法獲得體面的表現。 – Quassnoi