建立索引视图的第一步,是建立一个支持索引的视图,为了支持索引视图,必须定义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