1

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

1 回答 1

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;

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

于 2013-07-08T16:08:16.200 回答