大家应用视图无疑是简化了SQL查询,由于视图的重用性类似于自定义函数,所以很多人相对喜欢应用视图,但是应用视图简化了SQL却没有任何执行性能的提升,而且还带来维护。
于是大家又开始研究索引视图的可用性了。
个人把视图理解编译过的SQL执行计划,索引视图为实物化的类表,还包含索引结构。
就如大家理解表的索引一样,索引视图同样会提升查询效率,但是索引维护、数据写等代价也随之增加。
创建索引视图
1、选项设置:
SET ANSI_NULLS,ANSI_PADDING,ANSI_WARNINGS,CONCAT_NULL_YIELDS_NULL,ARITHABORT,QUOTED_IDENTIFIER ON
GO
SET NUMERIC_ROUNDABORT
OFF
GO
2、绑定架构选项(WITH SCHEMABINDING)
CREATE VIEW dbo.VIEW_Pqs WITH SCHEMABINDING
AS
select .....
GO
3、设置唯一的聚集索引
CREATE UNIQUE CLUSTERED INDEX [IDX_VIEW_Pqs] ON [dbo].[VIEW_PQS]([S_id]) ON [PRIMARY]
GO
4、至于SQL的语法有一些限制,比如不能用count(*)之类的(用count_big(*)替换) 。可以查看帮助文档
5、对于索引视图应用到的基表,可能会有数据写错误。
基本上可以execute sp_dboption 'dbname','ARITHABORT' ,'true'即可(就是修改数据库选项set ARITHABORT
on即可)
当然是对于设置好后新创建的数据写是没有问题的,对于原来已有的需要重新设置选项并编译。
--*******************************************************************************************************
SET选项 要求的值 默认服务器的值 OLE DB和ODBC的值 DB LIB的值
ANSI_NULLS ON OFF ON OFF
ANSI_PADDING ON ON ON OFF
ANSI_WARNINGS ON OFF ON OFF
ARITHABORT ON OFF OFF OFF
CONCAT_NULL_YIELDS_NULL ON OFF ON OFF
NUMERIC_ROUNDABORT OFF OFF OFF OFF
QUOTED_IDENTIFIER ON OFF ON OFF