圖 1. 當查詢優化器使用索引視圖時一般能夠提高多少性能
使用視圖的輔助索引
視圖的輔助性非群集索引可以提高其它查詢性能。與表的輔助索引類似,視圖的輔助索引也可以提供更多選項,以便查詢優化器在編譯過程中從中進行選擇。例如,如果查詢包括群集索引未涉及的列,優化器可以在計劃中選擇一個或多個輔助索引,從而避免對索引視圖或基表進行費時的全局掃描。
由于索引需要不斷維護,所以為架構添加索引會增加數據庫的額外開銷。因此應該認真考慮,找到索引和維護額外開銷之間的平衡點。
使用索引視圖的好處
實現索引視圖之前,請先分析數據庫的工作量。運用自己對查詢以及各種工具(例如 SQL 分析器)的知識來鑒別使用索引視圖可以獲益的查詢。如果經常進行聚合和聯接,最好使用索引視圖。
并非所有查詢都會從索引視圖中獲益。與普通索引類似,如果未使用索引視圖,就沒有好處可言。在此情況下,不但不能提高性能,還會加大磁盤空間的占用、增加維護和優化的成本。但是,如果使用了索引視圖,它們可以(成數量級地)明顯地提高數據訪問的性能。這是因為查詢優化器使用存儲在索引視圖中的預先計算的結果,從而大大降低了執行查詢的成本。
查詢優化器只在查詢的成本比較大時才考慮使用索引視圖。這樣可以避免在查詢優化成本超出因使用索引視圖而節省的成本時,試圖使用各種索引視圖。當查詢成本低于 1 時,幾乎不使用索引視圖。
使用索引視圖可以受益的應用包括:
◆決定支持工作量
◆數據集市
◆聯機分析處理 (OLAP) 庫和源
◆數據挖掘工作量
從查詢的類型和模式的角度來看,受益的應用可被歸納為包含以下內容的應用:
◆大表的聯接和聚合
◆查詢的重復模式
◆重復聚合相同或重疊的列集
◆針對相同關鍵字重復聯接相同的表
◆上述的組合
相反,包含許多寫入的聯機事務處理 (OLTP) 系統或更新頻繁的數據庫,可能會因為要同時更新視圖和根本基表而使維護成本增加,所以不能利用索引視圖。
查詢優化器如何使用索引視圖
SQL Server 查詢優化器可自動確定何時可以將索引視圖用于給定的查詢執行中。查詢中無需直接引用視圖,優化器就可以將該視圖用于查詢執行計劃。因此,無需對現有的應用程序本身進行任何更改,這些應用程序即可利用索引視圖。唯一需要做的就是創建索引視圖。
優化器的考慮因素
查詢優化器會考慮幾個條件來確定索引視圖能涵蓋部分查詢還是整個查詢。這些條件符合查詢中的單個 FROM 子句并包含以下內容:
◆查詢 FROM 子句中的表必須是索引視圖 FROM 子句中的表的超集。
◆查詢中的聯接條件必須是視圖中聯接條件的超集。
◆查詢中的聚合列必須是視圖中的聚合列的子集。
◆查詢選擇列表中的所有表達式都必須源自于視圖選擇列表或源自于不包括在視圖定義中的表。
◆查詢搜索條件謂詞必須是視圖定義中搜索條件謂詞的超集。視圖搜索謂詞中的每個合取項都必須以同樣的形式出現在查詢搜索謂詞中。
◆查詢搜索條件謂詞中的所有列(屬于視圖定義中的表)都必須出現在下列一項或多項中:
視圖定義中的同一個謂詞。
◆GROUP BY 列表。
文章來源于領測軟件測試網 http://www.kjueaiud.com/