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

Oracle SQL 效能優化系列 (4):WHERE 條件順序與避免 SELECT *

     編輯:Oracle 資料庫基礎

5. WHERE 子句條件順序的影響(規則基礎優化器)

在規則基礎優化器(RBO)下,Oracle 以自下而上順序解析 WHERE 子句。因此:

  • 表與表之間的聯結條件應寫在最前面(最上方)。
  • 過濾效果最強(能過濾掉最多資料)的條件應寫在最後面(最下方)。

實測對比

低效寫法(156.3 秒)

SELECT ...
FROM emp e
WHERE sal > 50000
  AND job = 'MANAGER'
  AND 25 < (SELECT COUNT(*) FROM emp WHERE mgr = e.empno);

高效寫法(10.6 秒)

SELECT ...
FROM emp e
WHERE 25 < (SELECT COUNT(*) FROM emp WHERE mgr = e.empno)
  AND sal > 50000
  AND job = 'MANAGER';

將最耗資源的子查詢條件前置,使 Oracle 先以最小結果集驅動後續過濾,大幅縮短執行時間。

6. 避免在 SELECT 子句使用 *

使用 SELECT * 雖方便,但效能極差。Oracle 解析時需查詢資料字典將 * 展開為所有欄位名稱,額外增加解析開銷與字典存取。明確列出所需欄位不僅效能較好,程式碼可讀性與維護性也更佳。

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