資料庫是動態網站的心臟,也是效能瓶頸的高發區。本文針對 ASP/ASP.NET/PHP 等動態網頁架構,整理 10 大經實戰驗證的優化原則,涵蓋索引、存儲過程、連線管理、SQL 寫法、鎖策略等核心面向。
| 場景 | 游標 | 鎖類型 | 說明 |
| 唯讀、單向遍歷 (最常見) | ForwardOnly (預設) | ReadOnly | 最輕量、效能最佳 |
| 需隨機存取、書籤 | Static / Keyset | Optimistic | 資料快照/鍵集,佔用 tempdb |
| 高併發更新 | Dynamic | Pessimistic (adLockPessimistic) | 編輯即鎖列,易死鎖,慎用 |
原則 6:減少物件存取開銷 — 區域變數快取欄位值
反模式:
For i = 0 To rs.Fields.Count - 1
Response.Write rs.Fields(i).Value ' 每次存取 COM 介面
Next
優化:
Dim vals() : vals = rs.GetRows() ' 一次取回二維陣列
For i = 0 To UBound(vals, 2)
Response.Write vals(0, i) & "," & vals(1, i)
Next
或逐欄位存入區域變數:Dim name : name = rs("name")。
原則 7:不要快取 Connection 物件於 Application/Session
- Application 級:單一連線遭所有請求搶佔,嚴重阻塞
- Session 級:每用戶一連線,耗盡連線池、DB 端壓力大
- 最佳實務:每頁面/請求 取用 → 用畢 歸還,依賴 IIS/驅動內建連線池 (ODBC/OLEDB/ADO.NET 皆支援)
- ASP.NET:
using (var conn = new SqlConnection(cs)) { conn.Open(); ... } 自動歸還池
原則 8:拒絕 SELECT * — 只取所需
- 減少網路傳輸、記憶體佔用、緩衝池壓力
- 利用覆蓋索引 (索引含所有查詢欄位) 避免回表
- Schema 變更時不易破壞相容性
原則 9:及時關閉/釋放資源 — 防洩漏
-- Classic ASP / VBScript
rs.Close : Set rs = Nothing
conn.Close : Set conn = Nothing
-- ASP.NET / C#
using (var conn = new SqlConnection(cs)) {
using (var cmd = new SqlCommand(sql, conn)) {
using (var rdr = cmd.ExecuteReader()) { ... }
}
} -- 自動 Dispose,即使發生例外
未釋放會導致連線池耗盡、DB 端閒置連線堆積、最終服務掛掉。
原則 10:OLEDB 直連 / 無 DSN 連線字串 — 部署彈性與效能
SQL Server (SQLOLEDB / SQLNCLI)
Provider=SQLOLEDB.1;Data Source=192.168.1.100;Initial Catalog=MyDB;User ID=app;Password=secret;Connect Timeout=15;
MySQL (MySQL ODBC 8.0 Unicode Driver)
Driver={MySQL ODBC 8.0 Unicode Driver};Server=192.168.1.100;Database=MyDB;Uid=app;Pwd=secret;Option=3;
優勢:繞過 ODBC 管理層、免 DSN 設定、移植性強、連線建立較快。
附錄:OLEDB vs ODBC 效能基準參考 (Wrox ADO 2.0 測試)
| 連線方式 | SQL Server 連線建立 | Access 連線建立 |
| OLEDB (原生) | 基準 1.0x | 基準 1.0x |
| ODBC DSN | 1.3x - 1.5x 慢 | 1.2x 慢 |
| ODBC DSN-less | 1.1x - 1.2x 慢 | 1.1x 慢 |
總結
資料庫優化無銀彈,但這 10 大原則涵蓋了 90% 的常見效能坑。請從索引 → 存儲過程 → 連線池 → SQL 重寫 → 監控慢查詢 依序落地,並建立效能基線 → 壓測 → 優化 → 回歸 的持續改善循環。
- 上一篇文章: MySQL 入門 8 步走:從連線、建庫、建表到備份的完整實戰指南
- 下一篇文章: SQL 語句極致優化 34 條鐵律:從 Oracle 到通用關聯式資料庫的效能聖經
Copyright ©
程式碼之家 All Rights Reserved