首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MS SQL Server 查詢優化全方位指南:從索引設計到硬體架構

     編輯:MySQL 資料庫相關知識

查詢緩慢十大常見成因

  1. 缺少索引或未用到索引(程式設計缺失,最常見)
  2. I/O 吞吐量不足,形成瓶頸
  3. 缺少計算欄位導致查詢無法優化
  4. 記憶體不足
  5. 網路速度慢
  6. 查詢回傳資料量過大(可採多次查詢或分頁降低單次負載)
  7. 鎖競爭或死鎖(程式設計缺失,最常見)
  8. sp_lock/sp_who 觀察活躍用戶,發現讀寫資源競爭
  9. 回傳不必要的欄位與列
  10. 查詢語句本身未優化

優化策略與具體作法

1. 存儲架構分離:資料、日誌、索引放不同 I/O 設備

資料量越大,I/O 優化越關鍵。舊版建議 Tempdb 放 RAID 0,SQL 2000 不再支援。

2. 資料表縱向與橫向分割

使用 sp_spaceuse 監控表大小,垂直拆分熱冷欄位,水平按範圍/雜湊分區。

3. 硬體升級

CPU、記憶體、磁碟陣列按瓶頸補強。

4. 索引優化核心原則

  • 依查詢條件建立索引,優化存取路徑,限制結果集大小。
  • 填充因子建議使用預設值 0。
  • 索引鍵越小越好,優先用位元組數少的欄位。
  • 避免對低基數欄位(如性別)建單一索引,選擇性太差優化器不會使用。

5. 網路優化

提升頻寬、降低延遲,必要時啟用壓縮協定。

6. 記憶體配置最佳實踐

  • Win 2000 + SQL 2000 支援 4-8GB 實體記憶體。
  • 虛擬記憶體 = 實體記憶體 × 1.5 倍。
  • 若啟用全文檢索,虛擬記憶體 ≥ 實體記憶體 × 3 倍。
  • max server memory 設為虛擬記憶體一半(即實體 × 1.5)。

7. CPU 並行處理

  • 增加 CPU 核心數,但並行處理比串行需更多記憶體資源。
  • 並行與否由 SQL Server 自動評估:複雜排序、聯結、掃描、GROUP BY 適合並行;UPDATE/INSERT/DELETE 目前不支援並行。

8. LIKE 查詢與全文索引

  • LIKE 'a%' 可用索引;LIKE '%a'、LIKE '%a%' 無法使用一般索引。
  • LIKE '%a%' 耗時與欄位總長度成正比,長字串欄位應用 VARCHAR 而非 CHAR。
  • 長文本欄位建立全文索引(佔空間但查詢快)。

9. 架構分離:DB Server / App Server 分離;OLTP / OLAP 分離

10. 分散式分區檢視表實作資料庫聯盟

步驟:① 水平分區資料表 → ② 各成員伺服器建立同名分散式分區檢視表。查詢可在任一節點執行,資料位置對應用透明。

11. 維護作業自動化

  • 重建索引:DBCC REINDEX、DBCC INDEXDEFRAG
  • 收縮資料/日誌:DBCC SHRINKDB、DBCC SHRINKFILE
  • 設定日誌自動收縮;大型資料庫勿啟用自動增長,會嚴重拖慢效能。

T-SQL 撰寫關鍵要點

DBMS 查詢計劃處理流程

  1. 詞法/語法檢查
  2. 提交查詢優化器
  3. 代數優化 + 存取路徑優化
  4. 預編譯模組生成查詢計劃
  5. 適時提交執行
  6. 回傳結果

SQL Server 資料儲存結構

  • 頁面大小 8KB (8060 位元組可用)
  • 8 頁 = 1 區Extent
  • 採 B-Tree 結構組織
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved