Sql-Server

SQL 連接的性能

  • March 23, 2022

我有一個查詢需要很長時間才能執行,主要是由於 PK 和 FK 上的 2 個表之間的連接。

密鑰以 2 個字母(始終相同,RN)為前綴,後跟 7 個數字,例如 RN1234567。

但是,如果我去掉前 2 個字母 ( right(tbl1.id,7) = right(tbl2.id,7) ) 並僅加入數字,則查詢速度會大大提高。為什麼是這樣?

在此處輸入圖像描述

您的統計數據需要更新。

請參閱統計、行估計和升序日期列

最近的日期在統計數據中沒有按比例表示,因此 SQL Server 低估了與>= 2012-12-31謂詞匹配的行數(如估計的行數 1 與實際 13922 所示)。因此它選擇了一個帶有嵌套循環的計劃並在另一張表上進行搜尋。

的使用right(tbl1.id,7) = right(tbl2.id,7)可以防止使用查找,因此您可以獲得更適合所涉及的實際行數的散列連接。

如果您更新該列的統計資訊,它自然應該選擇更合適的計劃。您還可以考慮使用跟踪標誌 2389 和 2390來降低將來出現此問題的可能性。

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