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

Oracle 優化器表達式轉換與評估機制全解析

     編輯:Oracle 資料庫相關知識

常量計算預評估

優化階段一次性計算常量表達式:sal > 24000/12 → sal > 2000。但不會化簡跨比較運算子的列表達式(如 sal*12 > 24000),開發者應習慣寫「列 運算子 常量」。

操作符轉換規則

原操作符轉換後等價形式
LIKE 無萬用字元ename LIKE 'SMITH' → ename = 'SMITH'(僅 VARCHAR2 生效)
IN 列表ename IN ('A','B') → ename='A' OR ename='B'
ANY/SOME 列表sal > ANY (v1,v2) → sal>v1 OR sal>v2
ANY/SOME 子查詢x > ANY (SELECT ...) → EXISTS (SELECT ... AND x>sal)
ALL 列表sal > ALL (v1,v2) → sal>v1 AND sal>v2
ALL 子查詢x > ALL (SELECT ...) → NOT EXISTS (SELECT ... AND x<=sal)
BETWEENsal BETWEEN 2000 AND 3000 → sal>=2000 AND sal<=3000
NOT 簡化NOT deptno = ... → deptno <> ...;NOT (A OR B) → NOT A AND NOT B

傳遞性與確定性函數

  • 傳遞性:WHERE col1=const AND col1=col2 → 推導 col2=const(僅 CBO 生效,需索引支援)
  • DETERMINISTIC 函數:相同輸入必回傳相同結果,無副作用。創建時宣告 DETERMINISTIC,優化器可在同一查詢、函數索引、物化視圖中複用結果。合法性由開發者負責。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved