日期:2014-05-17  浏览次数:20669 次

关于索引视图的理解
 1、何为索引视图,能不能给个比较简单形象的比喻?MSDN太抽象了。
 2、一般而言,索引视图何用?因为存在那么多的限制条件,个人觉得用不上呀!

  

------解决方案--------------------
何为索引视图


--在视图上建聚集索引
------解决方案--------------------
普通视图只是一段SQL语句生成的虚拟表,一个没有任何索引的视图不需要任何存储空间,访问普通视图还是要访问视图中实际访问的实体表。
索引试图就是在普通视图上建立索引,当视图被索引的时候,会像一个聚集索引的表一样被处理并且其索引结果会存在一个数据文件中。

参考下 http://www.sudu.cn/info/html/edu/20070422/321636.html

使用索引视图的好处  

实现索引视图之前,请先分析数据库的工作量。运用自己对查询以及各种工具(例如 SQL 分析器)的知识来鉴别使用索引视图可以获益的查询。如果经常进行聚合和联接,最好使用索引视图。 

并非所有查询都会从索引视图中获益。与普通索引类似,如果未使用索引视图,就没有好处可言。在此情况下,不但不能提高性能,还会加大磁盘空间的占用、增加维护和优化的成本。但是,如果使用了索引视图,它们可以(成数量级地)明显地提高数据访问的性能。这是因为查询优化器使用存储在索引视图中的预先计算的结果,从而大大降低了执行查询的成本。 

查询优化器只在查询的成本比较大时才考虑使用索引视图。这样可以避免在查询优化成本超出因使用索引视图而节省的成本时,试图使用各种索引视图。当查询成本低于 1 时,几乎不使用索引视图。 

使用索引视图可以受益的应用包括: 

● 决定支持工作量; 

● 数据集市; 

● 联机分析处理 (OLAP) 库和源; 

● 数据挖掘工作量。 

从查询的类型和模式的角度来看,受益的应用可被归纳为包含以下内容的应用: 

● 大表的联接和聚合; 

● 查询的重复模式; 

● 重复聚合相同或重叠的列集; 

● 针对相同关键字重复联接相同的表; 

● 上述的组合。 

相反,包含许多写入的联机事务处理 (OLTP) 系统或更新频繁的数据库,可能会因为要同时更新视图和根本基表而使维护成本增加,所以不能利用索引视图。

------解决方案--------------------
sql server中有2个概念,一个是索引,一个是视图。

那么如果把这两个结合起来,就是索引视图,

原来我们都知道索引,就是按照某个字段,建立一个物理的对象,实际最在于硬盘上的数据。
而视图,其实就是一个虚拟表,就是一个定义,实际上并不存在数据,要查询视图,都是通过定义中的基本表来访问数据的。

通过索引视图,其实就是按照索引的定义,建立了一个索引,也就是把虚拟的东西,给实体化了,实体化为实际的存在于硬盘上的数据。

但是索引视图,有不少限制条件:

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

那么,在实际上工作中,我也想用,但是实际去用的时候,都是由于上面的各种限制,最后都没办法用,

所以,总的来说,用的不多。