当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server中用索引视图查看性能状况

MSSQL
SQL Server中删除重复数据的几个方法
SQL Server 基础概念集
SQL Server导入导出
SQL SERVER实用技巧
sql server 常用函数
如何维护SQL Server的“交易日志”
SQL Server数据备份处理过程探讨
JSP中tomcat的SQL Server2000数据库连接池的配置
SQL Server服务器安装剖析
SQL Server 2005数据加密技术应用研究
SQL Server数据库的备份和恢复措施
SQL Server 2005性能测试实践
Jboss下MS SQL Server配置指导
Oracle和SQL Server 追求完美还是讲求实用
SQL Server服务器安装剖析
SQL Server:Oracle与SQL Server事务处理的比较
SQL Server:利用配置文件实现SQL Server与Oralce访问类的转换
SQL Server:测试SQL Server业务规则链接方法
SQL Server :SQL Server 2008高可用性解决方案优劣分析
SQLServer:数据库恢复

MSSQL 中的 SQL Server中用索引视图查看性能状况


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

在SQL Server中,视图是一个保存的T-SQL查询。视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全。但是,它并不占用数据库的任何空间。实际上,在你查询它之前,视图并不做任何事情。

索引视图

在SQL Server 2000和2005中,你能够给视图增加索引。但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立一个索引呢?嗯,这比较麻烦。

索引视图是一个已被物化或保存在数据库中的视图。当基本表更新时,给视图建立的索引由数据库引擎保存和更新。当你的结果集返回许多行并且需要求总数时,索引视图十分有用。这是因为数据库引擎必须在基表数据更新时维持视图索引,这可能会降低事务的性能。

要给一个视图建立一个索引,视图定义必须遵守某组条件和会话设置,同时要求把基表和视图定义联系起来。如果你确定你的视图满足这些标准(我将在后面讨论这一点),你给视图建立的第一个索引必须是一个唯一的聚集索引。建立的第一个视图必须在一组栏上,并且被聚集,以便索引被物化。

下面代码说明如何建立一个索引视图。其中的脚本将建立SalesHistory表,并给它加载数据。

CREATE TABLE SalesHistory( SaleID INT IDENTITY(1,1), Product VARCHAR(30), SaleDate SMALLDATETIME, SalePrice MONEY)DECLARE @i SMALLINTSET @i = 1WHILE (@i <=10000)BEGIN INSERT INTO SalesHistory (Product, SaleDate, SalePrice) VALUES ('Computer', DATEADD(mm, @i, '3/10/2006'), DATEPART(ms, GETDATE()) + (@i + 57) ) INSERT INTO SalesHistory (Product, SaleDate, SalePrice) VALUES ('BigScreen', DATEADD(mm, @i, '3/2/2006'), DATEPART(ms, GETDATE()) + (@i + 13) ) INSERT INTO SalesHistory (Product, SaleDate, SalePrice) VALUES ('PoolTable', DATEADD(mm, @i, '2/11/2007'), DATEPART(ms, GETDATE()) + (@i + 29) ) SET @i = @i + 1ENDGO

下面的代码将建立一个视图来概括表中的数据:

CREATE VIEW vw_salesbyproductASSELECTProduct,COUNT_BIG(*) as ProductCount,SuM(SalePrice) as TotalSalesFROMdbo.SalesHistoryGROUP BY Product

由于它只是一个T-SQL查询定义,建立这个视图不用多少时间。建立好视图后,你就可以像对一个表一样对它进行查询。

SELECT Product, TotalSales, ProductCountFROM vw_SalesByProductWHERE product = 'Computer'

如果你在SQL Server Management Studio或Query Analyzer中设置选项来查看查询的“执行计划”(Execution Plan),你会注意到上面的查询使用一个表扫描来找出Computer产品的总计结果。表扫描一般用于数据没有索引的情况下,它对整个结果集进行扫描以找出需要的结果。

进行一些简单的改变,你就能够修改视图,以便你可以给它增加一个索引,从而改善搜索性能。首先,你必须设定下面的会话设置: