[英]View takes longer than query
我有一個視圖,該視圖需要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
您可以通過替換聚合並使用窗口函數來加快兩者的運行速度:
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;
視圖和查詢之間的性能差異的原因可能是由於編譯。 該視圖在第一次運行時即被編譯(並優化)。 從那時起,數據可能已更改,或者您的使用方式可能已更改。 如果數據已更改,則可以重新編譯視圖,以制定更好的執行計划。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.