2013-07-08 63 views
0

我有一个视图需要20秒才能运行,其中运行完全相同的SQL作为自己的查询需要的时间少于1秒。任何人都知道这个原因或我能做些什么来加速观点?查看花费的时间比查询长

这是一个非常简单的视图,大约有7个左连接和几个“最大的每组”的嵌套查询。例如

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 

回答

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; 

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