SQL Server視圖索引與索引視圖指南
以下的文章主要描述的是SQL Server視圖索引(Indexed Views)與SQL Server數據庫的索引視圖指南,以及在其實際操作中的值得我們大家注意的事項與其實際應用代碼的描述,以下就是文章的主要內容的詳細描述,希望在你今后的學習中會有所幫助。
SQL Server視圖索引(Indexed Views):
文章分類:數據庫
正如第27章所講的那樣,SQL Server2000允許你創建索引視圖。一個索引的視圖是任意在其上定義了聚集索引的視圖。當一個CREATE INDEX語句在視圖上執行時,視圖的結果集在數據庫中的組織和存儲與具有聚集索引的數據表是一樣的。
視圖中數據表上的數據發生改變將會自動反映到視圖中,也會以同樣的方式數據表中的變化會反映到索引中。除了聚集索引,你可以在視圖上創建其他非聚集索引來提哦共另外的查詢性能。視圖上的額外的索引可為查詢優化器提供更多的選擇。
在SQL Server2000的開發版和企業版中,當一個索引視圖存在于一個表中,你可以在查詢中直接訪問視圖,優化器將自動考慮使用視圖的索引來提高查詢性能,就像表中的索引來提高性能一樣。即使一個查詢沒有直接在FROM子句中使用視圖名字,查詢優化器也將考慮使用索引視圖。換句話,當一個查詢可能從索引視圖中獲得好處,查詢優化器會替換掉表上的索引,而使用索引視圖來滿足查詢。
SQL Server 2000的所有版本都可以創建索引,但是只有開發版本和企業版將自動使用索引視圖來優化查詢,這一點很重要。在其他版本中,索引視圖將不會用來提高查詢性能,除非查詢中明確指定視圖并且“NOEXPAND”優化指示也被指定。沒有NOEXPAND,SQL Server將擴展視圖到視圖所對應的表并且基于表中的索引進行優化。下面的例子展示了使用NOEXPAND 選項來強制SQL Server來使用視圖索引。
Sql代碼
- Select * from sales_Qty_Rollup WITH (NOEXPAND)
- Where stor_id between 'B914' and 'B999' SET ARITHABORT ON
- Select * from sales_Qty_Rollup WITH (NOEXPAND)
- Where stor_id between 'B914' and 'B999' SET ARITHABORT ON
索引視圖的確增加了負擔并且可能使得SQL Server變得更復雜,因為需要比普通索引花費更多時間來維護。當索引所在的表被修改了,SQL Server不得不修改視圖的結果集和視圖中的索引。視圖索引的范圍可能比單個表要大些,特別是假如視圖定義在幾個大表上。
在修改中維護視圖及其索引所需的負擔所產生的負面影響要比從其獲得好處要多些。因為這些額外的維護負擔,只在那些獲得好處超過其維護負擔的視圖上創建索引。
索引視圖指南
在表數據相對靜態的視圖上創建索引。
將被多個查詢使用的視圖創建索引。
保持索引盡可能小,就像表索引一樣,越小的索引,SQL Server訪問數據越高效。
除了開發版和企業版之外,你將需要指定NOEXPAND指示符,否則索引視圖將不會用來優化查詢。
選擇索引:查詢VS 修改性能 | 評價索引的有效性(Evaluating Index Usefu ...