关于索引视图的理解

dongdongdongJL 2013-11-02 03:23:57
1、何为索引视图,能不能给个比较简单形象的比喻?MSDN太抽象了。
2、一般而言,索引视图何用?因为存在那么多的限制条件,个人觉得用不上呀!

...全文
296 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
-江沐风- 2013-11-05
  • 打赏
  • 举报
回复
引用 8 楼 dongdongdongJL 的回复:
单单就是视图而言,难道视图的处理方式就可以改善和提高效率了吗?
视图给用户呈现的是个虚拟的对象,并不是实际的表;当数据多的时候,可以把你所需要的建成视图,方便查询时的操作,不过,由于实际情况和索引视图的限制要求,用的不多!
LongRui888 2013-11-02
  • 打赏
  • 举报
回复
sql server中有2个概念,一个是索引,一个是视图。

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

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

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

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

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

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

所以,总的来说,用的不多。
dongdongdongJL 2013-11-02
  • 打赏
  • 举报
回复
函数哪? create function myfuction return table as begin 。。。 end 这个东西,到底是属于数据库哪?还是属于公共的函数哪?
xiaoliaoyun 2013-11-02
  • 打赏
  • 举报
回复
普通视图只是一段SQL语句生成的虚拟表,一个没有任何索引的视图不需要任何存储空间,访问普通视图还是要访问视图中实际访问的实体表。 索引试图就是在普通视图上建立索引,当视图被索引的时候,会像一个聚集索引的表一样被处理并且其索引结果会存在一个数据文件中。 参考下 http://www.sudu.cn/info/html/edu/20070422/321636.html 使用索引视图的好处 实现索引视图之前,请先分析数据库的工作量。运用自己对查询以及各种工具(例如 SQL 分析器)的知识来鉴别使用索引视图可以获益的查询。如果经常进行聚合和联接,最好使用索引视图。 并非所有查询都会从索引视图中获益。与普通索引类似,如果未使用索引视图,就没有好处可言。在此情况下,不但不能提高性能,还会加大磁盘空间的占用、增加维护和优化的成本。但是,如果使用了索引视图,它们可以(成数量级地)明显地提高数据访问的性能。这是因为查询优化器使用存储在索引视图中的预先计算的结果,从而大大降低了执行查询的成本。 查询优化器只在查询的成本比较大时才考虑使用索引视图。这样可以避免在查询优化成本超出因使用索引视图而节省的成本时,试图使用各种索引视图。当查询成本低于 1 时,几乎不使用索引视图。 使用索引视图可以受益的应用包括: ● 决定支持工作量; ● 数据集市; ● 联机分析处理 (OLAP) 库和源; ● 数据挖掘工作量。 从查询的类型和模式的角度来看,受益的应用可被归纳为包含以下内容的应用: ● 大表的联接和聚合; ● 查询的重复模式; ● 重复聚合相同或重叠的列集; ● 针对相同关键字重复联接相同的表; ● 上述的组合。 相反,包含许多写入的联机事务处理 (OLTP) 系统或更新频繁的数据库,可能会因为要同时更新视图和根本基表而使维护成本增加,所以不能利用索引视图。
dongdongdongJL 2013-11-02
  • 打赏
  • 举报
回复
单单就是视图而言,难道视图的处理方式就可以改善和提高效率了吗?
中国风 2013-11-02
  • 打赏
  • 举报
回复
引用 6 楼 dongdongdongJL 的回复:
或者说,能不能怎样理解一下,对于视图创建聚集索引,其实就是将视图的数据真正获取到,并在后台与数据库的真是表建立一对一关系,这样在维护视图时,就可以更快速?
个人看法:针对视图建索引,也就是把视图记录以索引的形式存储在硬盘,你要存储在硬盘有排序就需要有一个唯一的排序顺序存储在硬盘 这是MS-SQL语法限制的规则,必须遵守,除非你不用MS-SQL 用法限制参数MSDN: http://msdn.microsoft.com/zh-cn/library/ms191432(v=sql.90).aspx
dongdongdongJL 2013-11-02
  • 打赏
  • 举报
回复
或者说,能不能怎样理解一下,对于视图创建聚集索引,其实就是将视图的数据真正获取到,并在后台与数据库的真是表建立一对一关系,这样在维护视图时,就可以更快速?
dongdongdongJL 2013-11-02
  • 打赏
  • 举报
回复
所谓索引视图会将数据保存到物理位置,这句话如何理解?
中国风 2013-11-02
  • 打赏
  • 举报
回复
引用 2 楼 dongdongdongJL 的回复:
为什么要在视图上建立唯一聚集索引?
要确定唯一健,这是虚拟表必须的。
中国风 2013-11-02
  • 打赏
  • 举报
回复
2、一般而言,索引视图何用?因为存在那么多的限制条件,个人觉得用不上呀! --------- a.主要用于权限的控制,常用语句时简化引用语句. b.也可针对性建上索引,提高效率.
dongdongdongJL 2013-11-02
  • 打赏
  • 举报
回复
为什么要在视图上建立唯一聚集索引?
中国风 2013-11-02
  • 打赏
  • 举报
回复
何为索引视图 --在视图上建聚集索引

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧