最近在維護公司項目時,需要加載某頁面,總共加載也就4000多條數據,竟然需要35秒鐘,要是數據增長到40000條,我估計好幾分鐘都搞不定。臥槽,要我是用戶的話估計受不了,趁閑著沒事,就想把它優化一下,走你。先把查詢貼上:
Sql代碼執行后有圖有真相:

這么慢,沒辦法就去看看查詢計劃是怎么樣:

這是該sql查詢里面執行三個函數時生成查詢計劃的截圖,一看就知道,執行時開銷比較大,而且都是花費在聚集索引掃描上,把鼠標放到聚集索引掃描的方塊上面,依次看到如下詳細計劃:


從這幾張圖里,可以看到查詢I/O開銷,運算符開銷,估計行數,以及操作的對象和查詢條件,這些都為優化查詢提供了有利證據。第1,3張圖IO開銷比較大,第2張圖估計行數比較大,再根據其它信息,首先想到的應該是去建立索引,不行的話再去改查詢。先看看數據庫引擎優化顧問能給我們提供什么優化信息,有時候它能夠幫我們提供有效的信息,比如創建統計,索引,分區什么的。先打開SQL Server PRofiler 把剛剛執行的查詢另存為跟蹤(.trc)文件,再打開數據庫引擎優化顧問,做如下圖操作

最后生成的建議報告如下:

在這里可以單擊查看一些建議,分區,創建索引,根據提示創建了如下索引:
Sql代碼索引創建后,再次執行查詢,原以為可提高效率,沒想到我勒個去,還是要30幾秒,幾乎沒什么改善,優化引擎顧問有時候也會失靈,在這里只是給大家演示有這種解決方案去解決問題,有時候還是靠譜的,只是這次不靠譜。沒辦法,只有打開函數仔細瞅瞅,再結合上面的查詢計劃詳細圖,刪除先前創建的索引,然后創建了如下索引:
Sql代碼新聞熱點
疑難解答