1、子查詢展開
single-row(=,<,>,<=,>=,<>),exists,not exists,in,not in,any,all
不能做子查詢展開的通常會在sql執行計畫最後一步才執行,一般是filter型別計畫,效率很差
in ,exists, =any 可轉換為半連線(semi join)
not in, not exists, <>all 可轉換為反連線 (anti join)
展開2條件:展開後語義完全等價,內嵌檢視的子查詢必須cost低於原sql才展開
2、檢視合併
簡單檢視合併(始終合併)
外連線檢視合併(作為外連線的驅動表 非驅動表但檢視定義中只包含乙個表)
複雜檢視合併(cost低於原sql才合併)
3、星型轉換 針對各緯度表的限制條件,等價改寫子查詢附加到事實表 通過位圖索引間的操作提高效率
4、連線謂詞推入 把條件加入原檢視定義sql內部 cost低於原sql才推入
5、連線因式分解 提取公共部分,避免同乙個表掃瞄2次(11.2新特性)
6、表擴充套件 分割槽表分割槽索引不可用時 單獨處理此分割槽 相當於可用分割槽 union all 不可用分割槽(11.2新特性) cost低於原sql
7、表移除 外來鍵關聯 外連線 可以去除不必要的表
8、 in or 等價 or改寫時 union all lnnvl()
in-list iterator in所在列上必須有索引
in-list expansion/or expansion 可改寫為union all cost低於原sql才改寫 (可以用到不同列各自索引、分割槽修剪等特性)
in-list filter in後是自查詢不是常量集合並不做子查詢展開
子查詢展開/檢視合併
Oracle中的查詢轉換簡介(上)
oracle查詢轉換的概念 oracle在解析目標sql時可能會對其對其做等價改寫,目的是為了更高效的自行目標sql,即oracle可能會將目標改寫成語義上完全等價的但執行效率更高的形式。oracle查詢轉換的型別有如下 子查詢展開 檢視合併 簡單檢視合併 外連線檢視合併 複雜檢視合併 星型連線轉換...
Oracle轉換(顯示轉換)
三種常用的轉換函式 1.to char number character date character 2.to number character number 3.to date character date 一 轉換函式 1.日期到字串的轉換中 to char 引數一,引數二 引數1 日期型值或...
oracle 遞迴查詢 Oracle遞迴查詢
1.1 建立表與插入資料 create table district id number 10 not null,parent id number 10 name varchar2 255 byte not null alter table district add constraint distr...