首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle SQL 效能優化 34 條黃金法則:從寫法習慣到執行計畫調校

     編輯:Oracle 資料庫相關知識

SQL 優化是資料庫效能提升投資報酬率最高的手段。本文彙整 34 條實戰優化法則,涵蓋表連接順序、WHERE 條件排列、索引運用、Hint 應用、統計資訊維護等核心領域。

優化法則速查表

#法則核心說明
1表連接順序(RBO)FROM 右至左解析,小表/交叉表置右(驅動表)
2WHERE 連接條件前置表連接條件寫在過濾條件之前
3避免 SELECT *解析轉換列名耗時,明確列出所需欄位
4減少資料庫往返批次處理、Array Fetch、PL/SQL 批量綁定
5調大 ARRAYSIZESQL*Plus/Pro*C 設 200 減少網路交互
6用 DECODE/CASE 減少掃描單次掃描完成多條件分支邏輯
7合併無關查詢多個簡單查詢合為一條(UNION ALL/條件聚合)
8刪除重複用 ROWIDDELETE WHERE ROWID > (SELECT MIN(ROWID) ...)
9TRUNCATE 替代 DELETE全表清空不產生 UNDO、釋放 High Water Mark
10頻繁 COMMIT釋放鎖、UNDO、Redo Log Buffer 空間
11WHERE 替代 HAVING先過濾再聚合,避免全表掃描後再篩選
12減少子查詢表存取子查詢去關聯、合併重複子查詢
13善用內建函數如 NVL, DECODE, CASE 替代複雜邏輯
14使用表別名減少解析時間、避免列名歧義
15EXISTS 替代 IN/NOT IN半連接語意,早期終止,避免子查詢排序合併
16識別低效 SQL查詢 V$SQLAREA 找高 Buffer Gets、低 Hit Ratio 語句
17建立/維護索引B-Tree 結構,大表效果明顯,定期 REBUILD
18EXISTS 替代 DISTINCT一對多查詢去重,EXISTS 早期終止更快
19SQL 大寫Oracle 內部轉大寫,省解析 CPU
20Java 少用 + 連接字串用 StringBuilder 或參數化
21避免索引列用 NOTNOT 導致全表掃描
22避免索引列運算WHERE sal*12 > 25000 → WHERE sal > 25000/12
23>= 替代 >直接定位邊界值,少一次掃描
24UNION 替代 OR(索引列)OR 導致全表掃描,UNION 可用索引
25IN 替代 OR可讀性較好,8i 後執行計畫通常相同
26避免索引列 IS NULLNULL 不存入 B-Tree 索引,改用 >=0 等
27複合索引必走前導列WHERE 僅引用非前導列 → 全表掃描
28UNION ALL 替代 UNION免排序去重,業務允許重複時優先用
29WHERE 替代 ORDER BY利用索引順序天然有序,避免 SORT
30避免索引列隱性轉型WHERE char_col = 123 → TO_NUMBER(char_col)=123 失效索引
31警惕殺索引寫法!=, ||, +, 列間比較 皆導致全表掃描
32大範圍查詢不走索引超過 30% 筆數全表掃描更快
33慎用排序操作DISTINCT/UNION/ORDER BY 觸發 SORT,調大 SORT_AREA_SIZE
34GROUP BY 前置過濾先 WHERE 再 GROUP BY,減少聚合輸入

進階優化工具

-- 找出高消耗 SQL
SELECT executions, disk_reads, buffer_gets,
       ROUND((buffer_gets-disk_reads)/buffer_gets,2) hit_ratio,
       ROUND(disk_reads/executions,2) reads_per_run,
       sql_text
FROM v$sqlarea
WHERE executions > 0 AND buffer_gets > 0
  AND (buffer_gets-disk_reads)/buffer_gets < 0.8
ORDER BY 4 DESC;

實戰建議

  1. 開發階段:EXPLAIN PLAN + AUTOTRACE 驗證執行計畫
  2. 測試階段:真實資料量壓測,收集 DBMS_STATS 統計資訊
  3. 生產階段:SQL Tuning Advisor, SQL Monitoring, ASH/AWR 報告分析
  4. 持續優化:建立 SQL 審核機制、基準測試回歸

參考來源:原文連結

34 條法則非銀彈,需結合業務場景、資料分布、版本特性靈活應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved