溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ORACLE中的查詢轉(zhuǎn)換有哪些

發(fā)布時(shí)間:2021-11-08 14:14:11 來(lái)源:億速云 閱讀:298 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

本篇內(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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI