SQL 調優主題可寫成書,但 90% 價值集中在四條鐵律。遵循這四條,無需精通內核即可大幅提升效能。
四大黃金法則
- 消除不必要的大表全表掃描
- 判準:有序表回傳 < 40% 行、無序表回傳 < 7% 行 → 應用索引。
- 手段:建立 B-Tree / Bitmap / Function-based Index;或 Hint 強制 /*+ INDEX(t idx) */。
- 驗證:比較 Index Range Scan I/O Cost vs Full Table Scan Cost (含並行度)。
- 小表全掃快取到專用緩衝區
- Oracle 7:ALTER TABLE small_table CACHE。
- 8i+:ALTER TABLE small_table STORAGE (BUFFER_POOL KEEP) 強制置入 KEEP Pool。
- 適用:頻繁全掃的小型編碼表、參數表。
- 確保最優索引使用
- 多索引可選時,檢查各索引選擇性、Clustering Factor、欄位順序。
- 包含 Bitmap、Function-based Index 評估。
- 必要時 Hint 指定 INDEX_COMBINE、INDEX_FFS。
- 確保最優 JOIN 方法
- Nested Loops:小結果集驅動、索引支援佳。
- Hash Join:大表連接、等值連接、記憶體充足。
- Sort Merge:無索引、需排序輸出、並行查詢。
- 透過 USE_NL/USE_HASH/USE_MERGE Hint 干預。
實施路徑圖
- Top SQL 識別 (V$SQLAREA Buffer Gets/Executions)。
- EXPLAIN PLAN / SQL Trace 獲取執行計畫。
- 對照四大法則診斷根因。
- 實施索引/改寫/Hint/參數調整。
- 負載測試驗證 → 固化 SQL Profile / Baseline。