SQL 效能優化是開發與 DBA 共同責任。本文彙整 20 條實戰驗證的優化原則,涵蓋 WHERE 條件排序、連接順序、子查詢改寫、索引使用陷阱、提示應用等核心領域,助你寫出高效率 SQL。
-- 差:全表掃描
WHERE TO_CHAR(dt, 'YYYY-MM-DD') = '2024-01-15'
-- 優:索引範圍掃描
WHERE dt >= DATE '2024-01-15' AND dt < DATE '2024-01-16'
WHERE id = :b1 而非硬編碼,共用游標、減少硬解析。IN 或 UNION ALL,避免全表掃描。-- 差:索引失效
WHERE sal * 12 > 25000
-- 優
WHERE sal > 25000 / 12
WHERE loc_id IN (10, 15, 20)
INDEX (a,b,c) 需 WHERE 條件含 a 才會被使用。-- 差:字串比較數字欄位,觸發 TO_CHAR(empno)
WHERE empno = '123'
-- 優
WHERE empno = 123
NOT IN (需注意 NULL)。SELECT *;大量資料考慮 HASH GROUP BY 提示。LIKE 'ABC%' -- 走索引
LIKE '%ABC' -- 全表掃描
LIKE '98___' 不走索引,改用 zipcode > '98000' AND zipcode < '99000'。SELECT *,減少網路傳輸、解析開銷、快取失效風險。SELECT e.ename FROM emp e,避免歧義、加快解析。EXPLAIN PLAN FOR ...; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);AUTOTRACE (SQL*Plus/Developer 內建)SQL_TRACE + TKPROF 深度分析V$SQL_PLAN / DBA_HIST_SQL_PLAN 歷史計畫比對「先測量、再優化、再驗證」。無執行計畫與統計資訊的優化都是盲目嘗試。
內化這 20 條法則,配合系統化測試流程,SQL 效能問題將不再是難題。