錯誤示範:SELECT * FROM GLENN.LOTSOFRECORDS (10,000 列 × 10 欄)
正確示範:SELECT KEYCOL, COL1, COL2, COL7 FROM GLENN.LOTSOFRECORDS
實測 (含緩衝池暖機後):
效益:減少網路傳輸、降低伺服器 CPU/記憶體壓力、縮短用戶等待。
延伸:搭配 WHERE 過濾列,進一步減少回傳資料量。
針對 WHERE UNITPRICE > 20.00 的查詢,若 UNITPRICE 無索引 → 全表掃描。
建立索引:
CREATE INDEX idx_product_price ON GLENN.PRODUCTLIST (UNITPRICE);
優化器即可採用索引區間掃描,回應時間從秒級降至毫秒級。
持續優化管道:
comp.databases.ibm-db2 新聞群雖原文僅列兩條法則,但實務上 Web 應用還必須:
PreparedStatement,利用計劃快取、防止 SQL 注入。FETCH SIZE、結果集流式處理,避免大結果集 OOM。public class TimeDiff {
private DateTime startTime, endTime;
public void start() { startTime = DateTime.Now; }
public void stop() { endTime = DateTime.Now; }
public String getTimeDifferenceText() {
return (endTime - startTime).ToString();
}
}
用於量化每個 DB 操作耗時,建立基準線並驗證優化成果。
| 法則 | 關鍵動作 | 量化指標 |
|---|---|---|
| 按需檢索 | SELECT 明確欄位 + WHERE 過濾列 | 網路流量 ↓ 20%+、回應時間 ↓ |
| 優化資料庫 | 針對 WHERE/JOIN/ORDER BY 欄位建索引 + 定期 RUNSTATS | 全表掃描 → 索引掃描、CPU ↓ |
| 連線池/PreparedStatement | 配置連線池 + 參數化查詢 | 連線建立開銷 ↓ 90%+、計劃重用率 ↑ |