SQL NOTEVIEW

VIEW
视图可分为三类:
1.普通视图(Regular view)
2.索引视图(Indexed view)
3.分区视图(Partitioned view)

视图定义:
1.Use ENCRYPTION to encrypt the view scirpt;
2.Use SCHEMABINDING to bind the realative table;
3.Use ViewData to show the metadata of view,else the return matadata would be the related tables';
4.Use CheckOption to check whether the updated data match the view definition;


相关限制
1.视图不能嵌套超过32层(尽量不要使用嵌套)
2.视图不能建立在历史表上
3.视图不能使用全文索引
4.视图定义中不能修改表结构
5.Compute,compute by,INTO关键字不允许出现在View中 


普通试图只存储视图的元数据,在执行计划中直接映射到相应的物理表中。
索引视图是指在视图上添加索引(the first index must be Cluster Index),then the indexed view could store the data(actualy the index store the data).
Index view must use the schemabinding option,and 视图定义中必须使用schemaName.tableName的方式
由于索引视图中的索引存储了相关数据,因此在执行查询时查询优化器会直接使用索引中数据来提高查询效率

索引视图的限制:
•索引视图涉及的基本表必须ANSI_NULLS设置为ON 
•索引视图必须设置ANSI_NULLS和QUOTED_INDETIFIER为ON 
•索引视图只能引用基本表 
•SCHEMABINDING必须设置 
•定义索引视图时必须使用Schema.ViewName这样的全名 
•索引视图中不能有子查询 
•avg,max,min,stdev,stdevp,var,varp这些聚合函数不能用 


分区视图是指将多个表结构一致但存储不同数据段数据的表使用Union联合起来,使用check constraint来限制数据各表中不能存储相同数据,某一条数据有唯一的表来存放。

由于在分区视图中存在check约束,因此在Insert和update时,可以对应到相应的表中,查询优化器能使用check约束来排除查询中为关联的表,从而提高查询效率,
同时对应的物理表可以存放到不同的存储磁盘上,从而提高了IO的平行度。

可以使用视图来更新数据,但是不推荐使用
视图更新数据有以下限制:
1.只能一次更新视图定义中一张表的数据
2.随意计算列,常量列,集合函数产生列不能更新
3.Group By,Having,Distinct关键字不能影响到的列不能更新
4.在视图定义中使用WITH CHECK OPTION时,更新数据必须满足视图定义中的where限制条件。

使用EXEC sp_refreshview ‘ViewName’ 来刷新视图
使用sys.sql_modules来查询视图

在可以使用存储过程或函数代替视图时,尽量使用存储过程或函数,因为存储过程预先编译,效率更高。
原文地址:https://www.cnblogs.com/TeyGao/p/2727391.html