积极答复者
Sql server 2005 的视图是否有缓存机制。

问题
答案
-
我创建了个子视图,然后又创建了个视图使用了前面创建的子视图,我发现当我修改了子视图后,发现后创建的视图查询的数据使用了子视图修改前的数据,重建当前的视图就使用了修改后的子视图的查询数据,是不是在sql server 2005中,视图的数据会被缓存起来?
Have to refresh it with sp_refreshview after changing underlying objects.
另外,视图嵌套查询对性能有影响吗?相对于不建视图直接用表关联查询?- 已标记为答案 Hong-Gang Chen - MSFTModerator 2010年2月12日 5:30
全部回复
-
Hi
“Views are nothing but saved SQL statements, and are sometimes referred as “Virtual Tables”. Keep in mind that Views cannot store data (except for Indexed Views); rather they only refer to data present in tables.” From http://www.sql-server-performance.com/articles/dba/view_basics_p1.aspx 所以视图是不会存数据,我也没有遇到过试图cache数据的问题。
但是你提到的性能问题上,嵌套试图在很多时候并不是一件好事。因为视图是不能接受参数的,所以使用视图返回的数据中很有可能包含了你的查询里所不必要的数据,这样就会给SQL带来负担。
你可以考虑使用table-valued function.他们可以带参数,所以有针对性一些。但是不建议用scalar-valued function。 Scalar functions are performance evils,这句话相信大家都知道吧,赫赫
-
我创建了个子视图,然后又创建了个视图使用了前面创建的子视图,我发现当我修改了子视图后,发现后创建的视图查询的数据使用了子视图修改前的数据,重建当前的视图就使用了修改后的子视图的查询数据,是不是在sql server 2005中,视图的数据会被缓存起来?
Have to refresh it with sp_refreshview after changing underlying objects.
另外,视图嵌套查询对性能有影响吗?相对于不建视图直接用表关联查询?- 已标记为答案 Hong-Gang Chen - MSFTModerator 2010年2月12日 5:30