查看比查询花费更长时间

时间:2013-07-08 16:04:51

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

我有一个需要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

1 个答案:

答案 0 :(得分:4)

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

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;

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