Sql-Server

雜湊匹配溢出

  • August 2, 2018

我這裡發生了雜湊匹配溢出。我已經用 FULLSCAN 更新了所涉及表的統計資訊,所以不是這樣。任何指針都非常感謝。

https://www.brentozar.com/pastetheplan/?id=Bkq1VjySm

我使用的是 SQL 2017 Enterprise,記憶體為 64GB。

鑑於數據的大小,可能無法完全避免溢出,但您可以做一些事情來改進查詢。

  1. 確保您的連接和 where 子句列是 NC 索引鍵
  2. 您沒有選擇很多列,所以不要害怕包含它們以使索引覆蓋
  3. 計算行號 ( 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 之間是否存在關係attendStudy但可能值得使用臨時表或索引視圖來實現表達式以使其成為 SARGable。您還可以探索在包含相應日期數據的任一表中添加和填充附加列。

這也將為您打開額外的索引選項,以及在必要時實現ABS的能力。DATEDIFF

由於這是針對 SQL Server 2014 的,因此可能值得探索非聚集列儲存索引,這可能會減少嘗試找出合適的行儲存索引的痛苦,並且更適合像這樣的大型 DW 樣式查詢。

希望這可以幫助!

引用自:https://dba.stackexchange.com/questions/213837