Sql-Server
SQL 連接的性能
我有一個查詢需要很長時間才能執行,主要是由於 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來降低將來出現此問題的可能性。