代码之家  ›  专栏  ›  技术社区  ›  Neil Barnwell

为什么在SQL Server 2005中查询会更快,仅仅因为它在视图中?

  •  1
  • Neil Barnwell  · 技术社区  · 15 年前

    我们有(大的) SELECT 查询,可能需要大约30秒才能运行。我被告知,当置于视图中时,运行时间不到5秒。

    我的假设是,SQL Server缓存的查询计划不会改变,那么为什么这里的性能会有很大的提高呢?

    说清楚一点,这真的只是一个采取如下措施的案例:

    select * from table /* Lots of joins, where clauses */
    

    并使其成为一个视图:

    create view myfirstview as select * from table /* Lots of joins, most of the where clauses */
    select * from myfirstview where /* The rest of the where clauses (i.e. the ones that can change) */
    
    4 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    8 年前

    不,未索引/物化的视图是 expanded like 宏。

    尽管有人告诉你,但没有什么特别的“景观”魔术。

        2
  •  4
  •   marc_s    15 年前

    “我被告知”……你自己检查和核实过吗?

    老实说,我会很惊讶……“常规”视图只是一个存储的SQL语句-没有缓存,没有任何内容

    除非 他们 我说的是 索引视图 (物化视图),实际上是一个系统维护的表——数据存储在磁盘上,就像普通表一样。

    这不再是一个真正的视图-即使它仍然被称为视图;-)那些索引视图(带有聚集索引)可以非常快-因为它们存储组成视图的实际数据就像一个表一样。

        3
  •  1
  •   Michael Buen    15 年前

    也许告诉你的是 Indexed Views . Materialized Views 是标准术语

        4
  •  1
  •   RickNZ    15 年前

    我敢打赌,告诉你这件事的人做了这样的测试:

    首先,时间选择本身需要多长时间 下一步,看多长时间

    问题是,选择会导致SQL Server从磁盘读取大量数据。一旦进入内存,查询将执行得更快。如果您只运行了两次select,或者颠倒了上面两个查询的顺序,您会注意到类似的改进。

    要进行真正的苹果对苹果比较,请在每次查询之前运行以下命令:

    CHECKPOINT
    DBCC DROPCLEANBUFFERS