我有一個需要4分鐘的報告查詢,並且在我們的最大允許限制下應用了30秒。我應該使用臨時表嗎?
我注意到它有很多內部連接。其中一個,我看,它是加入到一個Person表格中,該表格有數百萬行。我想知道如果分解查詢會更有效率。這樣做效率會更高:
假設所有密鑰都已編入索引。 表C有800萬條記錄,表B有600萬條記錄,表A有40萬條記錄。
SELECT Fields
FROM TableA A
INNER JOIN TableB B
ON b.key = a.key
INNER JOIN Table C
ON C.key = b.CKey
WHERE A.id = AnInput
或者
SELECT *
INTO TempTableC
FROM TableC
WHERE id = AnInput
- TempTableC現在有1000條記錄 然後
SELECT Fields
FROM TableA A
INNER JOIN TableB B --Maybe put this into a filtered temp table?
ON b.key = a.key
INNER JOIN TempTableC c
ON c.AField = b.aField
WHERE a.id = AnInput
基本上,帶來的結果集到臨時表,然後再加入。
如果可能,請發佈緩慢查詢的執行計劃。 – Tony
6-8百萬條記錄不是那麼大,並且不會在正確編制索引的表上造成問題。我經常處理4億個記錄表,這些記錄表對查詢來說表現很好。 – Jamiec
提供的執行計劃將提供洞察實際性能開銷發生的位置,以及驗證正確的索引使用情況。請分享。 –