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

在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 SMALLINT
SET @i = 1
WHILE (@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 + 1
END
GO

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

CREATE VIEW vw_salesbyproduct
AS
SELECT
Product,
COUNT_BIG(*) as ProductCount,
SuM(SalePrice) as TotalSales
FROMdbo.SalesHistory
GROUP BY Product

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

SELECT Product, TotalSales, ProductCount
FROM vw_SalesByProduct
WHERE product = 'Computer'

时间: 2024-08-01 23:52:54

SQL Server中用索引视图查看性能状况的相关文章

通过 SQL Server 2005 索引视图提高性能

本文介绍了 SQL Server 2005 Enterprise Edition 中经过改进的索引视图功能.文中对索引视图进行了说明介绍,并讨论了可通过该功能改善性能的一些具体情况 一.索引视图 多年以来,Microsoft SQL Server 一直支持创建称为视图的虚拟表.通常,这些视图的主要作用是: • 提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中. • 提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式. 通过 SQL Server 2000,S

用 SQL Server 2000 索引视图提高性能

server|视图|索引|性能 什么是索引视图? 许多年来,Microsoft SQL Server 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某个子集. 提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据. SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能.它可以在一个视图上创建唯一的群集索引和非群集索引,可以改进最复杂查询的数据访问性能.在 S

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

一.索引视图 多年以来,MicrosoftSQL Server一直支持创建称为视图的虚拟表.通常,这些视图的主要作用是: 提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中. 提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式. 通过 SQL Server 2000,SQL Server 视图的功能得到了扩展,实现了系统性能方面的收益.可在视图上创建唯一的聚集索引及非聚集索引,来提高最复杂的查询的数据访问性能.在 SQL Server 2000 和 2005

使用SQL Server 2000索引视图提高性能

本文介绍 SQL Server 2000 企业版的新功能 - 索引视图.讲解索引视图并讨论一些提高性能的具体方案. 什么是索引视图? 许多年来,Microsoft SQL Server 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某个子集. 提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据. SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能.它可以

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

视图限制 如要在 SQL Server 2005 中的视图上创建一个索引,相应的视图定义必须包含: ANY.NOT ANY OPENROWSET.OPENQUERY.OPENDATASOURCE 不精确的(浮型.实型)值上的算术 OPENXML COMPUTE.COMPUTE BY ORDER BY CONVERT 生成一个不精确的结果 OUTER 联接 COUNT(*) 引用带有一个已禁用的聚集索引的基表 GROUP BY ALL 引用不同数据库中的表或函数 派生的表(FROM 列表中的子查询

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

server|sqlserver|视图|索引|性能 使用"索引微调向导" "索引微调向导"除建议使用基表的索引之外,还建议使用索引视图.使用该向导可提高管理员确定索引和索引视图相结合的能力,从而优化针对数据库执行的典型混合查询的性能. 由于"索引微调向导"强制使用所有必需的 SET 选项(以确保结果集的正确性),其索引视图将会成功创建.不过,如果您的应用程序的选项没有按照要求设置,可能无法利用这些视图.对那些参与索引视图定义的表执行的插入.更新或

SQL Server 数据库索引

原文:SQL Server 数据库索引 一.什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用[索引] 索引允许SQL Server在表中查找数据而不需要扫描整个表. 1.1.索引的好处: 当表没有聚集索引时,成为[堆或堆表] [堆]是一堆未加工的数据,以行标识符作为指向存储位置的指针.表数据没有顺序,也不能搜索,除非逐行遍历.这个过程称为[扫描].当存在聚集索引时,非聚集索引的指针由聚集索引所定义的值组成,所以聚集索引变得非常重要. 因为页面大小固定,所以列越少,所能存储的行就越多.

细说SQL Server中的视图_自学过程

1,什么是视图? 2,为什么要用视图: 3,视图中的ORDER BY; 4,刷新视图: 5,更新视图: 6,视图选项: 7,索引视图: 1.什么是视图 视图是由一个查询所定义的虚拟表,它与物理表不同的是,视图中的数据没有物理表现形式,除非你为其创建一个索引:如果查询一个没有索引的视图,Sql Server实际访问的是基础表. 如果你要创建一个视图,为其指定一个名称和查询即可.Sql Server只保存视图的元数据,用户描述这个对象,以及它所包含的列,安全,依赖等.当你查询视图时,无论是获取数据还

第十章——维护索引(7)——使用索引视图提高性能

原文:第十章--维护索引(7)--使用索引视图提高性能 前言: 视图是一个包含了一个或多个表的数据列的虚拟表.通常情况下,它仅仅是存储了查询的对象,一个视图可以当作一个表,可以用于存储过程.JOIN.用户自定义函数等等. 视图包含了下面两个主要特性: 1. 提供了一个安全机制,用于限制用户只能访问特定的数据. 2. 使得开发人员能定制用户的逻辑视图.   当你查询一个视图时,优化器会产生一个单一的执行计划给这个查询.在索引视图未出现之前,视图必须解决查询在执行期间才硬化.所有的JOIN.聚合都在