最近跟 Andy 哥在查一個 SQL 效能的問題,
執行時間大約是 10 幾秒,
所以使用者都受不了...
因為SQL很長,所以截取一部份出來,如下,
一開始以為是因為 in 裡面的項目太多所造成的(大約有 80 幾個),
後來改成只放一個,似乎也快不到那去。
所以就看一下它的執行計畫如下,
疑~~~ 為什麼下面會有一個那麼 粗的資料流呢?
大約3百多萬筆資料,而且還是用 掃描(Scan)的方式,那不就是一筆筆地找到要的資料嗎?
但是上面 Join 出來的資料卻很少。
這時我們的解法可以將原本 Join 那 3百多萬筆的方式,改成用 Subquery 的方式(當成是 Select 中的一個欄位),如下,
這樣執行時間大約是3秒內,而執行計畫如下,
如果有類似的狀況,可以試著這樣解看看哦 ^_^
另外,執行計畫中「實際」與「估計」資料筆數不符,是因為統計資料沒有更新,
請查看資料庫屬性->選項的設定,如下,
影片如下,
投影片如下,
http://www.slideshare.net/rainmakerho/sql-71254063
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^