[揭秘]sql server视图

yuanjunjing 2002-09-03 05:24:55
请问sql server是如何管理视图的.

如数据库上有Table_A,Table_B,现在建了一个视图view_C

[问题1]sql server是否在内部维护了一个实体表

select A.*,B.* from table_a a,tabel_b b where a.id=b.no

[问题2]执行"select * from view_C where id=1"与执行"select A.*,B.* from table_a a,tabel_b b where a.id=b.no and a.id=1"哪个效率高?

请高手讲解一下sql server是如何管理view的,在sql server上建一个实体表与建成一个视图有什么区别?


...全文
38 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzhughie 2002-09-06
  • 打赏
  • 举报
回复
试图不会提高速度(索引试图除外),试图没有实体,只是记录了查询语句。
vcvj 2002-09-06
  • 打赏
  • 举报
回复
SQL 2K的视图就是存放些查看表的指令,也可称虚表
vvyjp 2002-09-04
  • 打赏
  • 举报
回复
视图就是个虚拟表
yuanjunjing 2002-09-04
  • 打赏
  • 举报
回复
以前听说视图容易锁表,是有这么回事吗?
如果我的视图只是用来查询,并加上了with nolock这样子的语句还会有问题吗?
vonafter 2002-09-03
  • 打赏
  • 举报
回复
SQL Server是自动维护视图的,而且引入视图的目的不在于提高查询的速度,所以正如 zhujiechang 兄所说, "不是所有的视图都比select高"

引入视图的目的在于提供不同的安全访问,但其增加了系统的开销(比如说,存储空间等),而且视图是虚拟表,不是实际存在的,这就是其不同于表的地方.

你所提出的问题,我在SQL SERVER里试过了,确实视图比那句简单的查询代价小.
AWP365 2002-09-03
  • 打赏
  • 举报
回复
学习
zhujiechang 2002-09-03
  • 打赏
  • 举报
回复
是自动维护的,不过它不是个实体表。
它没有索引等功能,至于哪个效率高,我想你可以自己测试一下,不过提醒不是所有的视图都比select高。

不过我可以分析一下两条语句的情况,
1、视图的话,则根据a.id=b.no的条件生成虚拟表,然后才判断id=1。
2、sql server会根据三个字段的索引情况来进行查找,如果id是主键的话,它多数是先找id=1,然后才回去找a.id=b.no的条件。

34,590

社区成员

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

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