索引视图的建立

来源:互联网 发布:北京国税开票软件 编辑:程序博客网 时间:2024/05/01 03:34

建立索引视图的第一步,是建立一个支持索引的视图,为了支持索引视图,必须定义7个set 声明,它们是:

1.ARITHABORT ON;

2.CONCAT_NULL_YIELDS_NULL ON;

3. QUOTED_IDENTIFIER ON

4.ANSI_NULLS ON

5.ANSI_PADDING ON

6 ANSI_AWARING ON;

7NUMERIC_ROUNDABOUT OFF

如果这些设置出了问题,所有引用这些视图的下层表上的数据修改都会失败.对于SELECT 操作,上述设置也必须进行合适的设置;如果他们没有正确的设置,索引视图就会被查询优化器忽略.

索引视图的限制:
1,必须被建立的索引是唯一的群集索引,之后就可以建立非群集索引,取消群集索引也会导致所有的非群集索引也会被取消,一旦群集索引被取消之后,响应的结果集也会被移走,查询优化器会按照其他标准视图的方法处理这些视图.

2这种视图必须使用SCHEMABINDING 子句进行建立.SCHEMABINDING子句进行建立,SCHEMABINDING子句把视图绑定到下属表上,定义索引视图的SELECT 语句不能包含下列关键词:UNION,TOP ,DISTINCT,COMPUTE

或者HAVING,它也不能包含通配符.例如 *

3.在包含 group by 汇总的查询中,可以使用count_BIG(<expression>),并且需要count_big(*).所有的group by 涉及到的列,都必须在包含count_big(*) 的视图select 列表中出现.

4.不允许进行子查询,查询条件不允许contains或者freetext谓词.

5.特定的数据类型,例如文本非文本以及图象数据要被删除.

6.不允许使用outer join 运算,表也不能与他自己连接.

7.视图的定义需要的是确定性的.给定同样的数据返回同样的结果

建立视图和视图上相应的索引

一 选择数据库和定义支持索引视图的合适选择性

use Northwind

go

SET  ANSI_NULLS,ANSI_PADDING,ANSI_WARING,ARITHABORT,CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIER ON

GO

SET  NUMERIC_ROUNDABOR OFF

这个过程的第二步是建立视图

create view orderRevenue WITH SCHEMABINDING

AS

SELECT SUM(Quantity * UnitPrice) as Revenue,OrderDate,ProductId,Count_BIG(*) as COUNT

FROM  [order datails],orders WHERE [order details].orderID=order.orderID GROUP BY

OrderDate,Productid

go

在视图上建立群集索引,可以建立一个使用这个视图的索引,很有可能,你已经有了一个使用这个视图的查询,否则为什么不创建一个呢?

select revenue ,orderDate,Productid

from orderRevenuw