本文列出 SQL Server 內很慢的查詢會具備哪些因素,以及改善的效率。
變慢的因素
- 沒有為查詢語法會用到的資料表建立索引。
- 無法有效利用索引:不適當的查詢條件。
- 取得資料的邏輯有問題。
- 例如:明明只要取一個月的資料,但是取的時候都把一整年的資料都取出來?只需要查詢姓名、電話的通訊錄,卻取得整張基本資料表的欄位?
- 不適當的資料表設計。
- 資料重複過多的資料表 (沒有正規化) vs 切得太細 (取得資料要多次 Join,需要考慮反正規化)。這個問題可能需要交給 DBA 解決。
- 請參考 什麼是資料庫反正規化?優缺點是什麼 - ExplainThis。
改善方式
- 查閱執行計畫、調整查詢語法和索引:執行計畫可以告訴你 「SQL Server 如何做查詢?」,可以從執行計畫看到 SQL 運算的每個步驟,並用來找到效能的瓶頸。
- SQL 是一種宣告式程式語言 (告知想得到的結果,而非建立的步驟),會在內部產生 SQL 語法對應的查詢步驟。
- 擴充 SQL Server 所在伺服器的硬體。
- 減少、限制使用者的存取範圍。
- 調整伺服器、資料庫的組態。
請參考下一篇文章,瞭解查詢計畫:SQL Server 效能搶救 (2) 執行計畫 - 產生、檢視與一點點背景知識 – Lazy Coding