查看时间比查询时间长
Posted
技术标签:
【中文标题】查看时间比查询时间长【英文标题】: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
【问题讨论】:
【参考方案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;
视图和查询之间性能差异的原因可能是由于编译。视图在第一次运行时被编译(和优化)。从那时起,数据可能已经改变,或者您使用它的方式可能已经改变。如果数据发生变化,您可以重新编译视图以获得更好的执行计划。
【讨论】:
以上是关于查看时间比查询时间长的主要内容,如果未能解决你的问题,请参考以下文章