怎样为sql server2000创建视图索引

jackief 2003-11-26 09:39:41
小弟在维护一个系统,用的是sql数据库,但最后报表做的时候用的全部都是视图,现在很慢,所以这些视图建索引。但是看书上说,要为试图建立索引只有在建视图的时候用了 with schemabinding语句才能为视图建立索引。但现在这些视图应该是没有用该语句,请各位高手献计看还有什么办法能够建立视图索引,还有能够提高数据库的运行效率。
...全文
793 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger0305 2004-02-14
  • 打赏
  • 举报
回复
高手!
健者天行 2004-02-14
  • 打赏
  • 举报
回复
学习ed
guokai1217 2003-11-30
  • 打赏
  • 举报
回复
学习
cgsun 2003-11-29
  • 打赏
  • 举报
回复
向楼上的学习
tjan 2003-11-26
  • 打赏
  • 举报
回复
如果你的系统不是数据仓库,对视图建索引的实际意义不大,由于数据的改变,你要经常的维护视图索引!为了提高性能,你可以在视图的基表上对应你的查询语句建立索引,也是可以提高性能的。
zjcxc 2003-11-26
  • 打赏
  • 举报
回复
在计算列和视图上创建索引时的考虑
在 SQL Server 2000 中,还可以在计算列和视图上创建索引。在视图上创建唯一聚集索引可以提高查询性能,因为视图存储在数据库中的方式与具有聚集索引的表的存储方式相同。

UNIQUE 或 PRIMARY KEY 只要满足所有索引条件,就可以包含计算列。具体说来就是,计算列必须具有确定性、必须精确,且不能包含 text、ntext 或 image 列。有关确定性的更多信息,请参见确定性函数和非确定性函数。

在计算列或视图上创建索引可能导致前面产生的 INSERT 或 UPDATE 操作失败。当计算列导致算术错误时可能产生这样的失败。
pengdali 2003-11-26
  • 打赏
  • 举报
回复
这是“参数视图”它完全使用表的索引,没有索引视图那么多限制。
pengdali 2003-11-26
  • 打赏
  • 举报
回复
内嵌用户定义函数
内嵌用户定义函数是返回 table 的用户定义函数的子集。内嵌函数可用于实现参数化视图的功能。

请看下面的视图:

CREATE VIEW vw_CustomerNamesInWA AS
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = 'WA'

可创建更通用的版本 vw_CustomerNamesInRegion,方法是将 WHERE Region = 'WA' 替换为 WHERE Region = @RegionParameter 并让用户指定感兴趣的查看区域。然而,视图不支持在 WHERE 子句中指定的搜索条件的参数。

内嵌用户定义函数可用于支持在 WHERE 子句中指定的搜索条件的参数。下面是使用户得以在其选择中指定区域的函数示例:

CREATE FUNCTION fn_CustomerNamesInRegion
( @RegionParameter nvarchar(30) )
RETURNS table
AS
RETURN (
SELECT CustomerID, CompanyName
FROM Northwind.dbo.Customers
WHERE Region = @RegionParameter
)
GO
-- Example of calling the function for a specific region
SELECT *
FROM fn_CustomerNamesInRegion(N'WA')
GO

内嵌用户定义函数遵从以下规则:

RETURNS 子句仅包含关键字 table。不必定义返回变量的格式,因为它由 RETURN 子句中的 SELECT 语句的结果集的格式设置。


function_body 不由 BEGIN 和 END 分隔。


RETURN 子句在括号中包含单个 SELECT 语句。SELECT 语句的结果集构成函数所返回的表。内嵌函数中使用的 SELECT 语句受到与视图中使用的 SELECT 语句相同的限制。
内嵌函数还可用于提高索引视图的能力。索引视图自身不能在其 WHERE 子句搜索条件中使用参数,针对特定用户的需要调整存储的结果集。然而,可定义存储与视图匹配的完整数据集的索引视图,然后在包含允许用户调整其结果的参数化搜索条件的索引视图上定义内嵌函数。如果视图定义较复杂,则生成结果集所要执行的大多数工作都涉及在视图上创建聚集索引时生成聚合或联接多个表。之后如果创建引用视图的内嵌函数,则该函数可应用用户的参数化筛选,从结果集中提取由 CREATE INDEX 语句生成的特定行。在执行 CREATE INDEX 时复杂的聚合和联接进行一次,随后引用内嵌函数的所有查询都从简化的存储结果集中筛选行。例如:

定义将所有销售数据聚合到结果集的视图 vw_QuarterlySales,该结果集按季度报告所有商店的汇总销售数据。


在 vw_QuarterlySales 上创建聚集索引以具体化包含汇总数据的结果集。


创建筛选汇总数据的内嵌函数:
CREATE FUNCTION fn_QuarterlySalesByStore
(
@StoreID int
)
RETURNS table
AS
RETURN (
SELECT *
FROM SalesDB.dbo.vw_QuarterlySales
WHERE StoreID = @StoreID
)

然后用户可从内嵌函数进行选择以获得其特定商店的数据:
SELECT *
FROM fn_QuarterlySalesByStore( 14432 )

满足在第 4 步发出的查询所需的大多数工作将按季度聚合销售数据。该工作在第 2 步进行一次。第 4 步中的每个 SELECT 语句都使用函数 fn_QuarterlySalesByStore 筛选出用户的某个商店特有的聚合数据。

zjcxc 2003-11-26
  • 打赏
  • 举报
回复
下面的示例将创建一个视图,并为该视图创建索引。然后,引入两个使用该索引视图的查询。

USE Northwind
GO

--Set the options to support indexed views.
SET NUMERIC_ROUNDABORT OFF
GO
SET ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER,ANSI_NULLS ON
GO

--Create view.
CREATE VIEW V1
WITH SCHEMABINDING
AS
SELECT SUM(UnitPrice*Quantity*(1.00-Discount)) AS Revenue, OrderDate, ProductID, COUNT_BIG(*) AS COUNT
FROM dbo.[Order Details] od, dbo.Orders o
WHERE od.OrderID=o.OrderID
GROUP BY OrderDate, ProductID
GO

--Create index on the view.
CREATE UNIQUE CLUSTERED INDEX IV1 ON V1 (OrderDate, ProductID)
GO

--This query will use the above indexed view.
SELECT SUM(UnitPrice*Quantity*(1.00-Discount)) AS Rev, OrderDate, ProductID
FROM dbo.[Order Details] od, dbo.Orders o
WHERE od.OrderID=o.OrderID AND ProductID in (2, 4, 25, 13, 7, 89, 22, 34)
AND OrderDate >= '05/01/1998'
GROUP BY OrderDate, ProductID
ORDER BY Rev DESC

--This query will use the above indexed view.
SELECT OrderDate, SUM(UnitPrice*Quantity*(1.00-Discount)) AS Rev
FROM dbo.[Order Details] od, dbo.Orders o
WHERE od.OrderID=o.OrderID AND DATEPART(mm,OrderDate)= 3
AND DATEPART(yy,OrderDate) = 1998
GROUP BY OrderDate
ORDER BY OrderDate ASC

lynx1111 2003-11-26
  • 打赏
  • 举报
回复
学习
cppluo 2003-11-26
  • 打赏
  • 举报
回复
向大力学习
lvltt 2003-11-26
  • 打赏
  • 举报
回复
认真晓习。。。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧