SQL Server 效能搶救 (7) 改進查詢效能的心得、延伸閱讀

July 24, 2024

以下是個人在微調語法、調整商業邏輯時的一些心得,以及延伸閱讀。

微調語法善用索引

檢查 GROUP BY 的運算有沒有使用索引。對實體資料表建立索引後,GROUP BY 若能應用索引,效率會提高。不過在網路上查詢相關資料時,也有遇到有人指出「效果不大」。因此根據不同的使用狀況,而需要自己的最佳化策略。

此外,若能將 LIKE %XXX% 改成使用 LIKE XXX%LIKE XXX% 將可以適當的使用索引。

減少不需要的資料

只在需要時加入 Join 資料表。

盡可能在資料最少時進行計算,例如有利用暫存表不斷地計算資料時,排序等會增加 CPU 成本的動作,可以在最後篩選出結果後再做。

如果有子查詢或大量連接不同資料表時,可以先透過條件式篩選,減少資料筆數以後,再加入關聯的資料表 (與欄位)。

瞭解商業邏輯

去了解這段語法的商業邏輯和原本的目標,說不定可以找到冗餘、造成效能負擔的邏輯。如果商業邏輯較為複雜,且可能由多個人在不同時間維護,偶爾會發生重複取得、計算資料的情形。

最重要的是「資料結果要正確」。

調整結果的觀察

SQL 效能調整常常需要因查詢語法、資料表規格、資料的分布狀況等條件,制定自己的調整方式,以達到最佳的查詢效能。因此調整完成後,請觀察:

  1. 效能真的有提高嗎?不只是查詢,也要考慮包含寫入、更新和刪除的情形。
  2. 語法調整以後,資料的正確性如何,查詢結果有沒有和調整前相同?如果有連帶調整邏輯,是不是符合預期結果?

謝謝您看到這裡。若本文件有誤,歡迎指正,謝謝。

延伸閱讀

每一個細節都能談得更多,以下是各領域的相關資料:

Microsoft Learn (官方)

經典教學文件

解讀執行計畫

其它