2013-07-08 117 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; 

的原因視圖和查詢之間的性能差異可能是由於編譯。該視圖在第一次運行時被編譯(並優化)。此後,數據可能已更改,或者您使用的方式可能已更改。如果數據已更改以獲得更好的執行計劃,則可以重新編譯視圖。