您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“ORACLE中的查詢轉(zhuǎn)換有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“ORACLE中的查詢轉(zhuǎn)換有哪些”吧!
一、子查詢展開(subquery unnesting)
子查詢展開分兩種:
1、要么將子查詢中的表或視圖拆開來(lái)跟外面的表做連接,
2、要么不拆開子查詢,而是當(dāng)作一個(gè)內(nèi)嵌視圖與外面的表做連接
不是所有子查詢都會(huì)做子查詢展開,子查詢展開的條件
1、子查詢展開后的SQL跟原SQL一定要完全等價(jià)
2、對(duì)于子查詢不拆開,而是當(dāng)作一個(gè)內(nèi)嵌視圖的子查詢展開,改寫后的SQL成本之要小于原SQL才行
子查詢前的where條件是下列條件之一,那么滿足一定條件就會(huì)做子查詢展開
single-row(即=,<,>,>=,<=,<>)
exists
not exists
in
not in
any
all
二、視圖合并(view merging)
把視圖不在當(dāng)作一個(gè)獨(dú)立的處理單元,而是將其拆開,把構(gòu)成視圖的基表拿出來(lái)跟外部查詢中的表進(jìn)行連接,分三種
1、簡(jiǎn)單視圖合并(simple view merging)
指不含外連接,以及所帶視圖的視圖定義中不含distinct ,group by 等聚合函數(shù)的目標(biāo)SQL的合并,另外不能出現(xiàn)以下
集合運(yùn)算符(union ,union all,minus,intersect)
connect by 子句
rownum
2、外連接視圖合并(outer join view merging)
外部查詢的表與視圖之間使用了外連接,或者視圖的定義SQL中使用了外連接,以及所帶視圖的視圖定義中不含distinct ,group by 等聚合函數(shù)的目標(biāo)SQL的合并
有個(gè)簡(jiǎn)單的前提,要么該視圖做為外連接的驅(qū)動(dòng)表,如果作為被驅(qū)動(dòng)表,則該視圖的sql定義中只能有一張表
3、復(fù)雜視圖合并(complex view merging)
所帶視圖的視圖定義中含有distinct ,group by 等聚合函數(shù)的目標(biāo)SQL的合并
復(fù)雜視圖合并會(huì)把sql拆分,先把基表跟外部表連接后在做distinct ,group by,所有復(fù)雜視圖合并不一定會(huì)帶來(lái)成本值的減少,oracle會(huì)比較合并后的SQL,只有當(dāng)合并后SQL的成本值低于原SQL成本值,才會(huì)做復(fù)雜視圖合并
兩個(gè)隱含參數(shù)
通過(guò)查詢轉(zhuǎn)換前后的成本值來(lái)決定是否轉(zhuǎn)換,參數(shù)_optimizer_cost_based_transformation可以在session和system級(jí)別修改,默認(rèn)值'linear',默認(rèn)通過(guò)成本值比較來(lái)轉(zhuǎn)換sql,改為‘OFF',則不管成本值都會(huì)進(jìn)行復(fù)雜視圖合并。
_complex_view_merging,默認(rèn)為true,允許復(fù)雜視圖合并,改為false,關(guān)閉復(fù)雜視圖合并
三、星型轉(zhuǎn)換
star_transformation_enabled
默認(rèn)為false ,需要啟用則設(shè)置為true,也可以設(shè)置為temp_disable(不建臨時(shí)表)
四、連接謂詞推入
優(yōu)化處理帶視圖的SQL
僅支持以下類型
視圖定義中含有union all/union
視圖定義中含有distinct
視圖定義中含有g(shù)roup by
于外部查詢的連接時(shí)外連接
與外部查詢的連接時(shí)半連接
與外部查詢的連接時(shí)反連接
五、連接因式分解
優(yōu)化器處理帶union all 的SQL時(shí)的一種優(yōu)化方式
11gr2中才有
六、表擴(kuò)展(table expansion)
優(yōu)化器處理分區(qū)表的一種優(yōu)化方式
11gr2才有
hint 兩個(gè) no_expand_table ,expand_table
七、表移除(table elimination)
10gr2中已有,適合表與表之間通過(guò)外鍵連接,或者表與表之間是外連接的情況
到此,相信大家對(duì)“ORACLE中的查詢轉(zhuǎn)換有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。