当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 用SQLServer2000索引视图提高性能(下)

MSSQL
MSSQL 数据库备份和还原的几种方法 图文教程
GridView自定义分页的四种存储过程
sqlserver 中charindex/patindex/like 的比较
SQL2005 大数据量检索的分页
MSSQL2005 INSERT,UPDATE,DELETE 之OUTPUT子句使用实例
MSSQL 字符段分段更新
SQLServer2005中的SQLCMD工具使用
Sql server2005 优化查询速度50个方法小结
SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
sql2005 数据同步方法
配置 SQLServer2005 以允许远程连接
安装SQL2005 29506错误码的解决方案
SQL Server 2008的升级和部署问题
SQL Server教程:读取第三方数据库的数据
用Trigger规范insert, update的值

MSSQL 中的 用SQLServer2000索引视图提高性能(下)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 32 ::
收藏到网摘: n/a

  使用“索引微调向导”

“索引微调向导”除建议使用基表的索引之外,还建议使用索引视图。使用该向导可提高管理员确定索引和索引视图相结合的能力,从而优化针对数据库执行的典型混合查询的性能。

由于“索引微调向导”强制使用所有必需的 SET 选项(以确保结果集的正确性),其索引视图将会成功创建。不过,如果您的应用程序的选项没有按照要求设置,可能无法利用这些视图。对那些参与索引视图定义的表执行的插入、更新或删除操作可能会失败。


维护索引视图

SQL Server 自动维护索引视图,这与维护任何其它索引的情况类似。对于普通索引而言,每个索引都直接连接到单个表。通过对基础表执行每个 INSERT、UPDATE 或 DELETE 操作,索引相应地进行了更新,以便使存储在该索引中的值始终与表一致。

索引视图的维护与此类似。不过,如果视图引用了多个表,则对这些表中的任何一个进行更新都需要更新索引视图。与普通索引不同的是,对任何一个参与的表执行一次行插入操作都可能导致在索引视图中进行多次行插入操作。更新和删除操作的情况也是如此。因此,较之于维护表的索引,维护索引视图的代价更为高昂。

在 SQL Server 2000 中,某些视图可以更新。如果某个视图可以更新,则使用 INSERT、UPDATE 和 DELETE 语句可通过该视图直接修改根本基表。为某个视图创建索引并不会妨碍该视图的更新。有关可更新视图的详细信息,请参阅关于 SQL Server 2000 的“SQL Server 联机图书”中的“通过视图修改数据(英文)”。

维护成本的考虑因素

设计索引视图时应该考虑以下几点:

数据库中需要有一个额外的存储空间用于索引视图。索引视图的结果集以类似于典型表存储空间的方式物理保存在数据库中。
SQL Server 自动维护视图。因此,对定义视图所据的基表的任何更改都可能引起视图索引的一处或多处更改,从而导致维护开销的增加。
一个视图获得的净性能提高就是视图提供的查询执行节约总计与存储和维护该视图耗费的成本之间的差。

估计视图将占用的所需存储空间要相对简单一些。用 SQL 查询分析器的“显示估计的执行计划”工具求视图定义中 SELECT 语句的值。该工具将得出查询返回的行数和行大小的近似值。将这两个值相乘,即可估计出视图的可能大小。不过这只是一个近似值。视图索引的实际大小只能通过创建视图索引来精确得出。

从 SQL Server 执行的自动维护考虑因素的观点出发,“显示估计的执行计划”的功能可能会对此开销的影响有所了解。如果用 SQL 查询分析器评估修改视图的语句(针对视图的 UPDATE 语句、针对基表的 INSERT 语句),SHOWPLAN 将包括该语句的维护操作。同时考虑此成本和此操作将在生产环境中发生的次数,可以指示视图维护的可能成本。

通常建议对视图或基表进行的任何修改和更新都应该尽可能地成批执行,而不要单独进行。这样可以减少视图维护的某些开销。


创建索引视图

创建索引视图所需的步骤与视图的成功实现密不可分。

确保将在视图中引用的所有现有表的 SET 选项都正确。
创建任何新表和视图之前,确保会话的 SET 选项已正确设置。
确保视图定义是确定的。
使用 WITH SCHEMABINDING 选项创建视图。
创建视图的唯一群集索引。

使用 SET 选项以获得一致的结果

如果在执行查询时启用不同的 SET 选项,则在 SQL Server 中对同一个表达式求值会产生不同的结果。例如,将 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_WARNING ON OFF ON OFF
ARITHABORT ON OFF OFF OFF
CONCAT_NULL_YIELDS_NULL ON OFF ON OFF
NUMERIC_ROUNDABORT OFF OFF OFF OFF
QUOTED_IDENTIFIER ON OFF ON OFF


如果使用的是 OLE DB 或 ODBC 服务器连接,唯一必须修改的值是 ARITHABORT 的设置。所有 DB LIB 值都必须使用 sp_configure 在服务器级上正确设置或使用 SET 命令从应用程序正确设置。有关 SET 选项的详细信息,请参阅关于 SQL Server 2000 的“SQL Server 联机图书”中的“使用 SQL Server 中的选项(英文)”。


使用确定性函数

索引视图的定义必须是确定性的。如果选择列表中的所有表达式以及 WHERE 和 GROUP BY 子句都是确定性的,则视图就是确定性的。只要用特