儘管更新了統計數據,但估計的行數仍高於實際行數
我有一個(匿名的)查詢計劃
有一個表(Object8)在兩列(Column2 和 Column6)上的實際行數與估計行數有很大差異,這可以在雜湊匹配和排序運算符中看到
我已經更新了 Object8 表上的所有統計資訊(它們只是過時了幾天,而且表沒有太大變化)
還有什麼問題?
基數估計只是數字。除非您遇到性能問題,否則它們無關緊要。您在問題中指出,在查詢計劃的某些步驟中,實際行數和估計行數存在差異。這當然是正確的,但是很少看到估算值與實際行數完全匹配的非平凡查詢計劃。除非您確定該差異是查詢性能問題的根本原因,否則我不會關註一千行的差異。
讓我們考慮更新統計資訊:為什麼即使在更新統計資訊之後您仍會看到不准確的基數估計?統計數據通常不能完全描述列的數據。它們可以被採樣,201 步對於某些數據集可能是不夠的,如果數據存在偏差,密度就不是一個好的指標,等等。即使使用完美的統計對象,連接基數估計和在多列上組合過濾器也很困難,因為直方圖僅在一列上可用。SQL Server 往往沒有關於列之間相關程度的資訊,因此需要進行猜測。
如果您想了解更多資訊,我建議您閱讀Joe Sack的使用 SQL Server 2014 Cardinality Estimator 優化您的查詢計劃。以下是關於舊版 CE 和新版 CE 之間眾多差異之一的引述:
多個加入條件
對於帶有相等謂詞的連接,遺留 CE 計算每個相等謂詞的選擇性,假定獨立性並將它們組合起來。相比之下,新的 CE 根據在連接列上計算的多列頻率來估計連接基數。
CE 使用不同的模型。一個模型可能比另一個模型更適合您的數據,甚至只適合單個連接。在這種情況下,它與統計數據關係不大。僅更新統計數據還不足以對所有情況產生良好的估計。
另一方面,如果您有需要幫助的特定表現,則需要提供更多資訊。我在您發布的查詢計劃中沒有看到任何令人擔憂的地方。您對查詢有什麼性能問題?