首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

SQL 效能調優核心原則:WHERE 子句寫法陷阱與改寫對照

     編輯:Oracle 資料庫基礎

調優背景

開發初期資料量小不易發現效能差異;上線後資料增長,劣質 SQL 與優質 SQL 速度可差百倍。優化器依統計資訊與索引決定執行計劃,WHERE 子句寫法直接影響索引是否被使用。

六大 WHERE 子句陷阱與改寫

#陷阱失效範例索引友善寫法
1IS NULL / IS NOT NULLWHERE status IS NULL避免索引欄存 NULL;改用預設值或函數索引
2欄位聯接運算WHERE first_name||last_name='BillClinton'WHERE first_name='Bill' AND last_name='Clinton'
3前置萬用字元 LIKEWHERE name LIKE '%clinton%'WHERE name LIKE 'clinton%' (後置可用索引)
4ORDER BY 非索引/運算式ORDER BY sal*12改用索引欄;或建立函數索引
5NOT / <> 運算子WHERE salary <> 3000WHERE salary < 3000 OR salary > 3000
6IN 子查詢WHERE id IN (SELECT ...)WHERE EXISTS (SELECT 'X' FROM ...) — 相關子查詢可提早終止

EXISTS vs IN 效能差異原理

  • IN:先執行子查詢,結果存入臨時表 → 再執行主查詢
  • EXISTS:先執行主查詢,逐列驅動子查詢,找到首筆即停止
  • 同理 NOT EXISTS 優於 NOT IN

調優實務檢核

  1. 收集統計資訊 (DBMS_STATS)
  2. EXPLAIN PLAN 確認執行計劃
  3. 識別全表掃描、索引失效、排序溢寫
  4. 套用上述改寫原則
  5. 驗證改善效果
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved