【问题标题】:View takes longer than query查看时间比查询时间长
【发布时间】:2013-07-08 16:04:51
【问题描述】:

我有一个需要 20 秒才能运行的视图,其中运行与它自己的查询完全相同的 SQL 只需不到一秒。有谁知道这是什么原因,或者我可以做些什么来加快查看速度?

这是一个非常简单的视图,大约有 7 个 LEFT JOINS 和一些“每组最大 n 个”嵌套查询。例如

select t.id, t.rev, t.contents
from MyTable t
inner join(
    select id, max(rev) rev
    from MyTable
    group by id
) in on t.id = in.id and t.rev = in.rev

【问题讨论】:

    标签: sql sql-server view sql-server-2008-r2


    【解决方案1】:

    您可以通过使用窗口函数替换聚合和连接来加速:

    select t.id, t.rev, t.contents
    from (select t.id, t.rev, t.contents, MAX(rev) over (partition by id) as maxrev
          from MyTable t
         ) t
    where t.rev = t.maxrev;
    

    视图和查询之间性能差异的原因可能是由于编译。视图在第一次运行时被编译(和优化)。从那时起,数据可能已经改变,或者您使用它的方式可能已经改变。如果数据发生变化,您可以重新编译视图以获得更好的执行计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2019-04-16
      相关资源
      最近更新 更多