提供安全機制,將用戶限制在一個或多個基表中的數據的某個子集。 提供一種機制,允許開發人員定制用戶如何才能以邏輯方式查看存儲在基表中的數據。 SQL Server 2000 已經擴展了 SQL Server 視圖的功能,以提高系統性能。它可以在一個視圖上創建唯一的群集索引和非群集索引,可以改進最復雜查詢的數據訪問性能。在 SQL Server 2000 中,擁有唯一群集索引的視圖被稱為索引視圖。
注意: 索引視圖只是 SQL Server 2000 企業版和 SQL Server 2000 開發人員版的一個功能。
從數據庫管理系統 (DBMS) 的觀點來看,視圖是數據(元數據)的說明。創建典型視圖時,通過 SELECT 語句(定義一個顯示為虛擬表的結果集)來定義元數據。當其它查詢的 FROM 子句中引用了某個視圖時,將從系統目錄中檢索該元數據,并對其進行擴展以代替該視圖的引用。在視圖擴展之后,查詢優化器會為正在執行的查詢編譯單個執行計劃。
SQL Server 查詢優化器可自動確定何時可以將索引視圖用于給定的查詢執行中。查詢中無需直接引用視圖,優化器就可以將該視圖用于查詢執行計劃。因此,無需對現有的應用程序本身進行任何更改,這些應用程序即可利用索引視圖。唯一需要做的就是創建索引視圖。
優化器的考慮因素
查詢優化器會考慮幾個條件來確定索引視圖能涵蓋部分查詢還是整個查詢。這些條件符合查詢中的單個 FROM 子句并包含以下內容:
查詢 FROM 子句中的表必須是索引視圖 FROM 子句中的表的超集。 查詢中的聯接條件必須是視圖中聯接條件的超集。 查詢中的聚合列必須是視圖中的聚合列的子集。 查詢選擇列表中的所有表達式都必須源自于視圖選擇列表或源自于不包括在視圖定義中的表。 查詢搜索條件謂詞必須是視圖定義中搜索條件謂詞的超集。視圖搜索謂詞中的每個合取項都必須以同樣的形式出現在查詢搜索謂詞中。 查詢搜索條件謂詞中的所有列(屬于視圖定義中的表)都必須出現在下列一項或多項中: 視圖定義中的同一個謂詞。 GROUP BY 列表。 視圖選擇列表(若沒有 GROUP BY 列表)。 如果查詢包含多個 FROM 子句(子查詢、派生表、UNION),優化器可以選擇多個索引視圖來管理含有多個 FROM 子句的查詢。
注意: 也存在例外情形,即優化器可能將兩個 FROM 子句折疊成一個(將子查詢折疊成聯接或將派生表折疊成聯接變體)。如果出現此類情況,索引視圖替換可能會涵蓋原查詢中的多個 FROM 子句。
經常執行的查詢會聚合一個數據庫中的數據,再聚合另一個數據庫中的數據,然后聯接結果。由于索引視圖不能引用多個數據庫中的表,所以您不能設計一個視圖來執行整個進程。不過,可以為要進行聚合的每個數據庫創建索引視圖。如果優化器能夠將索引視圖與現有查詢相匹配,至少聚合處理將會因為不必記錄現有查詢而提高速度。盡管聯接處理不會加快,整個查詢的速度卻因使用了存儲在索引視圖中的聚合而加快。 經常執行的查詢會聚合多個表中的數據,然后使用 UNION 來將結果結合起來。UNION 不允許在索引視圖中使用。您可以設計一些視圖來執行每個單獨的聚合運算。然后優化器可以選擇索引視圖來加快查詢的速度,而無需記錄查詢。盡管 UNION 處理沒有改進,單個聚合進程卻得以改進。