WEB开发网
开发学院数据库MSSQL Server 用SQL Server 2005索引视图提高性能一 阅读

用SQL Server 2005索引视图提高性能一

 2007-05-31 15:22:50 来源:WEB开发网   
核心提示: 五、创建索引视图 创建索引视图所需的步骤对于视图的成功执行至关重要, 1.针对将在视图中引用的所有现有表,用SQL Server 2005索引视图提高性能一(3),确认 ANSI_NULLS 的设置正确无误, 2.创建任何新表之前, 必须由使用双结构名称 (schemaname.tablename) 的视图

  
   五、创建索引视图
  
   创建索引视图所需的步骤对于视图的成功执行至关重要。
  
   1.针对将在视图中引用的所有现有表,确认 ANSI_NULLS 的设置正确无误。
  
   2.创建任何新表之前,确认对下表所示的当前会话正确设置了 ANSI_NULLS。
  
   3.创建任何新表之前,确认对下表所示的当前会话正确设置了 ANSI_NULLS 和 QUOTED_IDENTIFIER。
  
   4.确认视图定义具有确定性。
  
   5.使用 WITH SCHEMABINDING 选项创建视图。
  
   6.在视图上创建唯一的聚集索引之前,确认会话的 SET 选项的设置正确无误,如下图所示。
  
   7.在视图上创建唯一的聚集索引。
  
   8.可用 OBJECTPROPERTY 函数检查现有表或视图上 ANSI_NULLS 和 QUOTED_IDENTIFIER 的值。
  
   使用 SET 选项获得一致的结果
  
   如果在执行查询时对当前会话启用了不同的 SET 选项,评估相同的表达式可在 SQL Server 2005 中产生不同的结果。例如,SET 选项 CONCAT_NULL_YIELDS_NULL 被设为 ON 后,表达式 'abc' + NULL 会返回值 NULL。但当 CONCAT_NULL_YIEDS_NULL 被设为 OFF 后,相同的表达式会生成 'abc'。对于当前会话和视图所引用的对象,索引视图需要几个 SET 选项的固定值,以确保正确维护视图并返回一致的结果。
  
   只要存在下列条件,就必须按下表中“必需的值”一列所示的值对当前会话设置 SET 选项:
  
   创建了索引视图。
  
   在加入索引视图的任何表上执行了任何 INSERT、UPDATE 或 DELETE 操作。
  
   查询优化器用索引视图生成查询计划。
  
   SET 选项       必需的值     默认服务器值     OLE DB和ODBC值     DB LIB 值
   ANSI_NULLS        ON        OFF        ON            OFF
  
   ANSI_PADDING       ON        ON         ON            OFF
  
   ANSI_WARNINGS      ON        OFF        ON            OFF
  
   CONCAT_NULL_YIELDS_NULL ON        OFF        ON            OFF
  
   NUMERIC_ROUNDABORT    OFF        OFF        OFF            OFF
  
   QUOTED_IDENTIFIER    ON        OFF        ON            OFF
  
   ARITHABORT4 选项必需被设为 ON,以便使当前会话创建索引视图,但是在 SQL Server 2005 中,只要 ANSI_WARNINGS 的值为 ON,该选项就会自动被设为 ON,所以不必对其进行设置。如果使用 OLE DB 或 ODBC 服务器连接,只需修改 ARITHABORT 设置的值。必须使用 sp_configure 在服务器级别或使用 SET 命令从应用程序正确设置所有 DB LIB 值。有关 SET 选项的详细信息,参阅 SQL Server 联机丛书中的“使用选项”。
  
   使用具有确定性的功能
  
   索引视图的定义必须具有确定性。如果选择列表中的所有表达式以及 WHERE 和 GROUP BY 子句都具有确定性,那么视图就具有确定性。具有确定性的表达式总是在通过一组特定的输入值对其进行评估时,返回相同的结果。只有具有确定性的函数才会加入具有确定性的表达式。例如,DATEADD 函数具有确定性,因为对于任何给定的一组参数值,该函数总对它的三个参数返回相同的结果。GETDATE 不具有确定性,因为它总调用相同的参数,而其返回的值在每次执行时都会发生变化。详细信息,参阅面向 SQL Server 2005 的 SQL Server 联机丛书中的“具有和不具有确定性的函数”。
  
   即使某个表达式具有确定性(如果其包含浮点表达式),确切的结果可能依处理器体系结构或微码的版本而定。为了在计算机间迁移数据库时确保 SQL Server 2005 中数据的完整性,这种表达式只能作为索引视图的非键列加入。不含浮点表达式的具有确定性的表达式被认为是精确的。只有永久和/或精确的具有确定性的表达式才可加入键列以及索引视图的 WHERE 或 GROUP BY 子句。永久性表达式是对已保存列的引用,包括一般列和标为 PERSISTED 的计算列。
  
   用 COLUMNPROPERTY 函数和 IsDeterministic 属性确定视图列是否具有确定性。用 COLUMNPROPERTY 函数和 IsPrecise 属性确定带有 SCHEMABINDING 的视图中的具有确定性的列是精确的。如果属性为 TRUE,COLUMNPROPERTY 将返回 1;如为 FALSE,则返回 0;而如果为 NULL,则表示无效输入。例如,在此脚本中
  
   CREATE TABLE T(a int, b real, c as getdate(), d as a+b)
   CREATE VIEW VT WITH SCHEMABINDING AS SELECT a, b, c, d FROM dbo.T
   SELECT object_id('VT'), COLUMNPROPERTY(object_id('VT'),'b','IsPrecise')
   SELECT 对 IsPrecise 返回 0,因为 b 列为实型。可通过 COLUMNPROPERTY 做一些实验,确认 T 的其他列是否具有确定性并是精确的。
  
   其他要求
  
   可索引的视图集合是可能的视图集合的一个子集。任何可索引的视图在有或没有索引的情况下都可存在。
  
   除了设计方针(“使用 SET 选项获得一致的结果”和“使用具有确定性的函数”这两节)中所列的要求外,还必须满足下列要求,以便在视图上创建唯一的聚集索引。
  
   有关基表的要求
  
   视图所引用的基表必须具有在创建表时所设的 SET 选项 ANSI_NULLS 的正确的值。可用 OBJECTPROPERTY 函数检查现有表上的 ANSI_NULLS 的值。
  
   有关函数的要求
  
   必须使用 WITH SCHEMABINDING 选项创建视图所引用的用户定义的函数。
  
   有关视图的要求
  
   必须使用 WITH SCHEMABINDING 选项创建视图。
  
   必须由使用双结构名称 (schemaname.tablename) 的视图引用表。
  
   必须由使用双结构名称 (schemaname.functionname) 的视图引用用户定义的函数。
  
   必须正确设置 SET 选项 ANSI_NULLS 和 QUOTED_IDENTIFIER。

上一页  1 2 3 

Tags:SQL Server 索引

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接