Sql-Server
雜湊匹配溢出
我這裡發生了雜湊匹配溢出。我已經用 FULLSCAN 更新了所涉及表的統計資訊,所以不是這樣。任何指針都非常感謝。
https://www.brentozar.com/pastetheplan/?id=Bkq1VjySm
我使用的是 SQL 2017 Enterprise,記憶體為 64GB。
鑑於數據的大小,可能無法完全避免溢出,但您可以做一些事情來改進查詢。
- 確保您的連接和 where 子句列是 NC 索引鍵
- 您沒有選擇很多列,所以不要害怕包含它們以使索引覆蓋
- 計算行號 (
RN
) 會導致相當多的排序和溢出——可能值得考慮使用不同的索引來解決這個問題。請注意,您在那裡使用的表達式DATEDIFF(day,s.COMPLETEDDATE,att.atd_date
, 也用於…… 您為
actual_day_difference
(AND a.actual_day_difference BETWEEN -60 AND 90
) 獲得的非 SARGable 謂詞,它消除了從 ~5mm 到 ~400k 的行。相當大的減少可能有助於早期的查詢。問題是
DATEDIFF(day,s.COMPLETEDDATE,att.atd_date)
必須生成整個結果集,然後過濾掉。像在 CTE、派生表或未索引視圖中那樣粘貼計算不會持久化它們。在此處查看我的問答:兩個日期列的 SARGable WHERE 子句。我不確定 and 之間是否存在關係
attend
,Study
但可能值得使用臨時表或索引視圖來實現表達式以使其成為 SARGable。您還可以探索在包含相應日期數據的任一表中添加和填充附加列。這也將為您打開額外的索引選項,以及在必要時實現
ABS
的能力。DATEDIFF
由於這是針對 SQL Server 2014 的,因此可能值得探索非聚集列儲存索引,這可能會減少嘗試找出合適的行儲存索引的痛苦,並且更適合像這樣的大型 DW 樣式查詢。
希望這可以幫助!