程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 用SQLServer2005索引視圖提高性能二

用SQLServer2005索引視圖提高性能二

編輯:關於SqlServer
 視圖限制
  
  如要在 SQL Server 2005 中的視圖上創建一個索引,相應的視圖定義必須包含:
  
  ANY、NOT ANY                        OPENROWSET、OPENQUERY、OPENDATASOURCE
  
  不精確的(浮型、實型)值上的算術              OPENXML
  
  COMPUTE、COMPUTE BY                     ORDER BY
  
  CONVERT 生成一個不精確的結果                OUTER 聯接
  
  COUNT(*)                          引用帶有一個已禁用的聚集索引的基表
  
  GROUP BY ALL                        引用不同數據庫中的表或函數
  
  派生的表(FROM 列表中的子查詢)               引用另一個視圖
  
  DISTINCT                          ROWSET 函數
  
  EXISTS、NOT EXISTS                     自聯接
  
  聚合結果(比如:SUM(x)+SUM(x))上的表達式          STDEV、STDEVP、VAR、VARP、AVG
  
  全文謂詞 (CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE) 子查詢
  
  不精確的常量(比如:2.34e5)                可為空的表達式上的 SUM
  
  內嵌或表值函數                       表提示(比如:NOLOCK)
  
  MIN、MAX                          text、ntext、image、filestream 或 XML 列
  
  不具有確定性的表達式                    TOP
  
  非 unicode 排序                       UNION
  
  SQL Server 2005 可檢測到的矛盾情況表示視圖將為空(比如,當 0=1 及 ...)
  
  注意 索引視圖可能包含浮型和實型列;但是,如果這類列為非永久性的計算列,則不能包含在聚集索引鍵中。
  
  GROUP BY 限制
  
  如果存在 GROUP BY,VIEW 定義為:
  
  一定包含 COUNT_BIG(*)。
  
  一定不包含 HAVING、CUBE、ROLLUP 或 GROUPING()。
  
  這些限制僅適用於索引視圖定義。即便不能滿足上述 GROUP BY 限制,查詢也可以在其執行計劃中使用索引視圖。
  
  有關索引的要求
  
  執行 CREATE INDEX 語句的用戶必須是視圖所有者。
  
  如果視圖定義包含 GROUP BY 子句,唯一的聚集索引的鍵只能引用 GROUP BY 子句所指定的列。
  
  一定不能在啟用 IGNORE_DUP_KEY 選項的情況下創建索引。
  
  六、示例
  
  本節中的例子闡述了如何結合兩類主要的查詢使用索引視圖:聚合和聯接。同時,說明了查詢優化器在確定某個索引視圖是否適用時所用的條件。有關完整的條件列表的信息,參閱“查詢優化器如何使用索引視圖”。
  
  這些查詢基於 AdventureWorks 中的表。AdventureWorks 是 SQL Server 2005 所提供的示例數據庫,並可作為寫入方式來執行。在創建視圖前後,用戶可能想用 SQL Server Management Studio 中顯示預計的執行計劃工具,來查看查詢優化器所選擇的計劃。雖然這些例子說明了優化器選擇低成本執行計劃的方式,但是 AdventureWorks 示例由於太小而無法顯示出性能方面的提升。
  
  在開始運用這些示例之前,確保通過運行下列命令對會話設置正確的選項:
  
  設置
  SET ANSI_NULLS ON
  SET ANSI_PADDING ON
  SET ANSI_WARNINGS ON
  SET CONCAT_NULL_YIELDS_NULL ON
  SET NUMERIC_ROUNDABORT OFF
  SET QUOTED_IDENTIFIER ON
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved