簡體   English   中英

視圖花費的時間比查詢時間長

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM