none
Sql server 2005 的视图是否有缓存机制。 RRS feed

  • 问题

  • 我创建了个子视图,然后又创建了个视图使用了前面创建的子视图,我发现当我修改了子视图后,发现后创建的视图查询的数据使用了子视图修改前的数据,重建当前的视图就使用了修改后的子视图的查询数据,是不是在sql server 2005中,视图的数据会被缓存起来?
    另外,视图嵌套查询对性能有影响吗?相对于不建视图直接用表关联查询?
    2010年2月9日 9:30

答案

  • 我创建了个子视图,然后又创建了个视图使用了前面创建的子视图,我发现当我修改了子视图后,发现后创建的视图查询的数据使用了子视图修改前的数据,重建当前的视图就使用了修改后的子视图的查询数据,是不是在sql server 2005中,视图的数据会被缓存起来?
    另外,视图嵌套查询对性能有影响吗?相对于不建视图直接用表关联查询?
    Have to refresh it with sp_refreshview after changing underlying objects.
    2010年2月9日 14:39

全部回复

  • 我创建了个子视图,然后又创建了个视图使用了前面创建的子视图,我发现当我修改了子视图后,发现后创建的视图查询的数据使用了子视图修改前的数据,重建当前的视图就使用了修改后的子视图的查询数据,是不是在sql server 2005中,视图的数据会被缓存起来?
    另外,视图嵌套查询对性能有影响吗?相对于不建视图直接用表关联查询?
    樓主看看MSDN聯機說明
    http://msdn.microsoft.com/zh-cn/library/ms190174%28SQL.90%29.aspx


    ROY WU(吳熹)
    2010年2月9日 9:59
    版主
  • 这上面并没有说明视图对性能是否会有影响
    2010年2月9日 10:05
  • 这上面并没有说明视图对性能是否会有影响
    看一下視圖設計
    查询优化器将视图定义中的逻辑纳入执行计划,而该执行计划是它为引用非索引视图的 SQL 语句生成的。

    視圖主要用於安全機制,簡化常用語句的調用。要提高性能針對情況建索引視圖
    ROY WU(吳熹)
    2010年2月9日 11:08
    版主
  • 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,这句话相信大家都知道吧,赫赫

    2010年2月9日 14:05
  • 我创建了个子视图,然后又创建了个视图使用了前面创建的子视图,我发现当我修改了子视图后,发现后创建的视图查询的数据使用了子视图修改前的数据,重建当前的视图就使用了修改后的子视图的查询数据,是不是在sql server 2005中,视图的数据会被缓存起来?
    另外,视图嵌套查询对性能有影响吗?相对于不建视图直接用表关联查询?
    Have to refresh it with sp_refreshview after changing underlying objects.
    2010年2月9日 14:39