在新的基數估價器中加入包容假設會降低 SQL Server 2014 和更新版本中的查詢效能

徵狀

請試想下列案例:

  • 您使用的是 Microsoft SQL Server 2014 或更新版本。

  • 您執行的查詢包含連接和非聯接篩選謂語。

  • 您可以使用新的 基數估價器 (新的 CE)來編譯查詢。

在這種情況下,您會遇到查詢效能下降的情況。 如果您使用舊版 CE 編譯查詢,就不會發生這個問題。

解決方案

在 SQL Server 2014 及更新版本中,您可以使用 [追蹤標記] 9476 強制新 CE 使用簡單的包容 假設,而不是預設的 基底假設。 (請參閱「其他資訊」一節)。如果符合下列條件,啟用此追蹤標誌就可以改善查詢方案選項,而不需完全還原為舊版 CE 模型:

  • 您體驗到不理想的查詢方案選擇,可導致包含連接和非結合篩選謂語之查詢的整體降級效能。

  • 您可以在「聯結基數」估計中驗證重要的 inaccuracy (也就是,實際與估計的資料列數明顯不同)。

  • 如果您使用舊版 CE 編譯查詢,就不會有這個 inaccuracy。

您可以在 [工作階段層級] 或 [查詢層級] 全域啟用此追蹤標記。 注意不正確地使用追蹤標記可能會降低您的工作負載效能。 如需詳細資訊,請參閱下列 Microsoft 知識庫文章的「簡介」一節:

2801413 啟用方案影響的 SQL Server 查詢優化程式列為,可由特定查詢層級的不同追蹤標記來控制

其他相關資訊

從 SQL Server 2014,新的基數估價器是針對資料庫相容性等級120及更高版本引入。 新的 CE 會變更查詢優化程式在針對不同運算子和謂語估計基數時所使用之模型中的數個假設(來自舊版 CE)。 其中一個變更與 [加入內嵌專案假設] 有關。 舊版 CE 模型假設使用者總是查詢現有的資料。 這表示對於包含兩個數據表之同等聯接運算的 join 謂語,聯接的資料行都存在於連接的兩邊。 針對連接資料表的其他非聯接篩選謂詞,舊版 CE 會針對連接謂詞和非聯接篩選謂語,採用某種程度的關聯。 這個隱含的關聯稱為簡單的內嵌。 或者,新的 CE 會使用基底包容做為關聯性。 新的 CE 模型假設使用者可能會查詢不存在的資料。 這表示個別資料表上的篩選謂語可能不彼此關聯。 因此,我們使用 probabilistic 方法。 針對許多實際案例,使用基本的包容假設會產生更佳的估計。 如此一來,就能建立更有效率的查詢方案選項。 不過,在某些情況下,使用簡單的包容假設可能會提供更好的結果。 如果發生這種情況,當您使用新的 CE (而不是舊版 CE)時,您可能會遇到效率較低的查詢方案選擇。 

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×