何育朋 朱思銘
摘要:本文闡述如何使用SQL Server 2005 Enterprise Edition 的索引視圖改善數(shù)據(jù)庫系統(tǒng)的整體性能。
關鍵詞:SQL Server 2005;database;DBMS
1索引視圖的作用
Microsoft SQL Server 視圖的主要作用是:
1.1提供一種安全機制,將用戶限制到一個或多個基表的某個數(shù)據(jù)子集中。
1.2提供一種機制,允許開發(fā)人員自定義用戶通過邏輯方式查看存儲在基表中的數(shù)據(jù)的方式。
在SQL Server 2005中,具有唯一的聚集索引的視圖稱為索引視圖。
2利用索引視圖提高系統(tǒng)性能的方法
2.1可在視圖上使用非聚集索引。
視圖上的非聚集索引可提供更好的查詢性能。與表上的非聚集索引類似,視圖上的非聚集索引可提供更多選項,供查詢優(yōu)化器在編譯過程中選擇。例如,如果查詢包含聚集索引所未涉及的列,那么優(yōu)化器可在計劃中選擇一個或多個輔助索引,避免對索引視圖或基表進行費時的完全掃描。
對架構添加索引會增加數(shù)據(jù)庫的開銷,因為索引需要持續(xù)的維護。在索引數(shù)量和維護開銷間尋求適當?shù)钠胶恻c時,應謹慎權衡。
2.2可在查詢優(yōu)化器中使用索引視圖。
SQL Server 查詢優(yōu)化器自動決定何時對給定的查詢執(zhí)行使用索引視圖。不必在查詢中直接引用視圖以供優(yōu)化器在查詢執(zhí)行計劃中使用。所以,現(xiàn)有的應用程序可運用索引視圖,而不用更改應用程序本身。
查詢優(yōu)化器通過考慮幾個條件來決定索引視圖能否涵蓋整個或部分查詢。這些條件對應查詢中的一個 FROM 子句并由下列這幾個部分組成:
2.2.1查詢 FROM 子句中的表必須是索引視圖 FROM 子句中的表的超集。
2.2.2查詢中的聯(lián)接條件必須是視圖中的聯(lián)接條件的超集。
2.2.3查詢中的聚合列必須可從視圖中的聚合列的子集派生。
2.2.4查詢選擇列表中的所有表達式必須可從視圖選擇列表或未包含在視圖定義中的表派生。
2.2.5如果與其他謂詞所匹配的行的超集相匹配,那么該謂詞將歸入另一個謂詞。例如,“T.a=10”歸入“T.a=10 and T.b=20”。任何謂詞都可歸入其自身。視圖中限制表值的那部分謂詞必須歸入查詢中限制相同表的那部分謂詞。此外,必須以 SQL Server 可驗證的方式實現(xiàn)這一點。
2.2.6屬于視圖定義中的表的查詢搜索條件謂詞的所有列必須出現(xiàn)在下列視圖定義的一項或多項中:
(1)一個 GROUP BY 列表。
(2)視圖選擇列表(如不存在 GROUP BY)。
(3)視圖定義中相同或等價的謂詞。
情況(1)和(2)允許 SQL Server 對視圖的列應用查詢謂詞,以便進一步限制視圖的列。情況 (3) 比較特殊,它不需要對列進行篩選,因此該列不必出現(xiàn)在視圖中。如果查詢不止包含一個 FROM 子句(子查詢、派生表、UNION),優(yōu)化器可能選擇幾個索引視圖來處理查詢,并將它們應用到不同 FROM 子句。
2.3可使用 NOEXPAND 視圖提示。
當 SQL Server 處理按名稱引用視圖的查詢時,視圖的定義只有在僅引用基表時才會被正常擴展。這個過程稱為視圖擴展。其屬于一種宏擴展形式。
NOEXPAND 視圖提示可強制查詢優(yōu)化器將視圖視為帶有聚集索引的普通表。其可防止視圖擴展。只有在 FROM 子句中直接引用索引視圖,才會應用 NOEXPAND 提示。例如:
SELECT Column1, Column2, ...FROM Table1, View1 WITH (NOEXPAND) WHERE ...
2.4可使用 EXPAND VIEWS 查詢提示。
處理按名稱引用視圖的查詢時,除非對視圖引用添加 NOEXPAND 提示,否則 SQL Server 總會擴展視圖。該提示會嘗試匹配索引視圖和擴展查詢,除非在查詢末尾的一個 OPTION 子句中指定 EXPAND VIEWS 查詢提示。例如,假設數(shù)據(jù)庫中有一個索引視圖 View1,以下,根據(jù)其邏輯定義(其 CREATE VIEW 語句)對 View1 進行了擴展,然后 EXPAND VIEWS 選項會阻止在計劃中使用 View1 的索引視圖來解析該查詢。使用語句如下:
SELECT Column1, Column2, ... FROM Table1, View1 WHERE ...
OPTION (EXPAND VIEWS)
如要確保讓 SQL Server 通過從查詢所引用的基表直接訪問數(shù)據(jù)來處理該查詢,而不必訪問索引視圖,那么可使用 EXPAND VIEWS。在某些情況下,EXPAND 視圖有助于消除因使用索引視圖而導致的鎖爭用。在測試應用程序時,NOEXPAND 和 EXPAND VIEWS 都可幫助用戶在使用和不使用索引視圖的情況下進行性能評估。
對數(shù)據(jù)庫系統(tǒng)確定一組適當?shù)乃饕赡芎軓碗s。如果在設計一般索引時需要考慮眾多可能性,那么對架構添加索引視圖會大幅提高設計和潛在結果的復雜性。例如,索引視圖可用于:
2.4.1查詢中引用的表的任何子集。
2.4.2該表子集的查詢中的條件的任何子集。
2.4.3組合的列。
2.4.4聚合函數(shù)(比如:SUM)。
2.5可應用DTA優(yōu)化物理數(shù)據(jù)庫的設計。
數(shù)據(jù)庫優(yōu)化顧問 (DTA) 是 SQL Server 2005 的一項功能,可有效優(yōu)化物理數(shù)據(jù)庫設計。使用 DTA 可讓管理員有一個更清晰的思路,可以更準確地、有針對性地組合使用確定索引、索引視圖和分區(qū)策略,從而簡化了物理數(shù)據(jù)庫的設計過程。
3結束語
下圖說明了使用以上方法通常所能取得的性能改進程度:
實踐證明,靈活使用上述方法,能提高數(shù)據(jù)庫整體性能。
參考文獻:
[1]Microsoft SQL Server 2005 Enterprise Edition English version helper document.
[2] ROBIN DEWSON.《SQL SERVER 2005基礎教程》[M].北京:人民郵電出版社,2006.
[3] SOLID QUALITY LEARNING[美].SQL SERVER 2005從入門到精通(應用技術基礎)[M],北京:清華大學出版社,2006.