Sql-Server
多視圖查詢優化
我們有一個怪物視圖,其中包含對許多(許多)表的連接,以便返回所需的數據。在某些情況下,要獲取一列資訊,我們必須連接到 4 個表,以獲取我們需要的值(數據庫結構不是很好,我們無法更改它)。
為了提高性能,我提取了某些組件並將它們建構到自己的視圖中,以簡化執行計劃,並希望優化查詢。
如果我編寫一個將這些視圖連接在一起的查詢,我是否會失去每個視圖的查詢優化的好處?即,我是通過將視圖組合到一個選擇中而回到我開始的位置,還是因為它們彼此原子地起作用,所以它本質上會表現得更好?
視圖只是儲存的查詢:您不執行視圖,而是從中
SELECT
獲取數據。當您合併多個視圖加入它們時,您所做的與在查詢中內聯視圖定義沒有什麼不同。事實上,這就是優化器所做的:它被稱為視圖擴展。如果您的視圖永遠不會被孤立地使用,而是總是連接在一起,我建議您停止單獨調整它們,而是專注於將使用它們的整體查詢。優化器將擴展視圖並生成一個計劃,該計劃與從各個視圖中選擇時使用的計劃無關。
另一方面,使您的單個視圖更快的因素(經過深思熟慮的 T-SQL 程式碼、索引、統計資訊)可能不會損害整體查詢的性能。只是不要期望最終的計劃是單個視圖計劃的簡單合併。
我昨天發布了一個關於視圖與查詢的相關問題。提供的建議是將連結到視圖的查詢計劃與連結到實際表的連結進行比較。結果 - 計劃是相同的 - 因此我沒有看到使用視圖帶來的性能提升。
如果您能夠使用索引視圖,您可能可以獲得性能,但是對於您可以創建索引視圖的內容有一些限制,因此它可能會或可能不會幫助您,但值得您研究它.