SQL 是非過程化語言,指定「要什麼數據」而非「如何獲取」。DB2 優化器基於系統目錄統計信息,自動生成最優存取路徑。SQL 靈活性高,功能等價的不同寫法性能卻可能天差地別。掌握編碼準則是高性能應用的基石。
優化器屬基於成本模型,綜合評估 CPU 成本、I/O 成本、目錄統計信息、SQL 語句本身,選擇總成本最低的存取路徑。四步驟:語法驗證 → 環境分析與優化 → 生成機器指令 → 執行或存儲。統計信息(表行數、列基數、索引狀態、表空間狀態等)是優化器決策的核心依據,必須通過 RUNSTATS 及時更新。
正確索引是性能關鍵。以查詢 SELECT LASTNAME, SALARY FROM EMP WHERE EMPNO='000010' AND DEPTNO='D01' 為例:
EMPNO = ... AND DEPTNO > 'D01' 索引須為 EMPNO, DEPTNO)。WHERE EMPNO='000010' 時 SELECT 列表包含 EMPNO 純屬浪費,產生額外開銷。用參數標記替換字面值,優化器可重用存取路徑,避免重複編譯,顯著提升重複執行性能。
FETCH FIRST n ROWS ONLY:硬性限制返回行數,適合分頁或僅需樣本數據。OPTIMIZE FOR n ROWS:不限制行數,但引導優化器優先優化前 n 行訪問路徑,適合分批顯示場景(如每頁 20 行)。Delphi 等工具不支持位置更新,加 FOR READ ONLY 明確標記只讀游標,助優化器啟用行分塊等優化。
頻繁 COMMIT 釋放鎖,避免長事務導致並發超時。修改數據後及時提交或回滾。
遵循三大鐵律、善用參數化、合理限制結果集、正確聲明游標屬性、及時提交事務,配合最新統計信息與恰當索引,即可避開 90% 的新手性能陷阱。深度調優仍需結合 Explain 分析存取路徑、連接方式、鎖行為等細節持續優化。