黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 4種Oracle表連接方式

4種Oracle表連接方式

更新時(shí)間:2021-03-08 17:20:33 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1188次

Join是一種試圖將兩個(gè)表結(jié)合在一起的謂詞,一次只能連接2個(gè)表,表連接也可以被稱為表關(guān)聯(lián)。有多種方法可以將2個(gè)表連接起來(lái),當(dāng)然每種方法都有自己的優(yōu)缺點(diǎn),每種連接類型只有在特定的條件下才會(huì)發(fā)揮出其最大優(yōu)勢(shì)。本文我們就來(lái)講一講4種Oracle表連接方式

row source(表)之間的連接順序?qū)τ诓樵兊男视蟹浅4蟮挠绊憽Mㄟ^(guò)首先存取特定的表,即將該表作為驅(qū)動(dòng)表,這樣可以先應(yīng)用某些限制條件,從而得到一個(gè)較小的row source,使連接的效率較高,這也就是我們常說(shuō)的要先執(zhí)行限制條件的原因。一般是在將表讀入內(nèi)存時(shí),應(yīng)用where子句中對(duì)該表的限制條件。

目前為止,無(wú)論連接操作符如何,典型的連接類型共有3種:

排序 - - 合并連接(Sort Merge Join (SMJ) )、嵌套循環(huán)(Nested Loops (NL) )和哈希連接(Hash Join),另外,還有一種Cartesian product(笛卡爾積),一般情況下,盡量避免使用。下面我們來(lái)一一介紹這些4種Oracle表連接方式。

1、排序 - - 合并連接(Sort Merge Join, SMJ)

內(nèi)部連接過(guò)程:

1) 首先生成row source1需要的數(shù)據(jù),然后對(duì)這些數(shù)據(jù)按照連接操作關(guān)聯(lián)列(如A.col3)進(jìn)行排序。

2) 隨后生成row source2需要的數(shù)據(jù),然后對(duì)這些數(shù)據(jù)按照與sort source1對(duì)應(yīng)的連接操作關(guān)聯(lián)列(如B.col4)進(jìn)行排序。

3) 最后兩邊已排序的行被放在一起執(zhí)行合并操作,即將2個(gè)row source按照連接條件連接起來(lái)

排序是一個(gè)費(fèi)時(shí)、費(fèi)資源的操作,特別對(duì)于大表。基于這個(gè)原因,SMJ經(jīng)常不是一個(gè)特別有效的連接方法,但是如果2個(gè)row source都已經(jīng)預(yù)先排序,則這種連接方法的效率也是蠻高的。

2、嵌套循環(huán)(Nested Loops, NL)

這個(gè)連接方法有驅(qū)動(dòng)表(外部表)的概念。其實(shí),該連接過(guò)程就是一個(gè)2層嵌套循環(huán),所以外層循環(huán)的次數(shù)越少越好,這也就是我們?yōu)槭裁磳⑿”砘蚍祷剌^小 row source的表作為驅(qū)動(dòng)表(用于外層循環(huán))的理論依據(jù)。但是這個(gè)理論只是一般指導(dǎo)原則,因?yàn)樽裱@個(gè)理論并不能總保證使語(yǔ)句產(chǎn)生的I/O次數(shù)最少。有時(shí) 不遵守這個(gè)理論依據(jù),反而會(huì)獲得更好的效率。如果使用這種方法,決定使用哪個(gè)表作為驅(qū)動(dòng)表很重要。有時(shí)如果驅(qū)動(dòng)表選擇不正確,將會(huì)導(dǎo)致語(yǔ)句的性能很差、很差。

3、哈希連接(Hash Join, HJ)

這種連接是在oracle 7.3以后引入的,從理論上來(lái)說(shuō)比NL與SMJ更高效,而且只用在CBO優(yōu)化器中。

較小的row source被用來(lái)構(gòu)建hash table與bitmap,第2個(gè)row source被用來(lái)被hansed,并與第一個(gè)row source生成的hash table進(jìn)行匹配,以便進(jìn)行進(jìn)一步的連接。Bitmap被用來(lái)作為一種比較快的查找方法,來(lái)檢查在hash table中是否有匹配的行。特別的,當(dāng)hash table比較大而不能全部容納在內(nèi)存中時(shí),這種查找方法更為有用。這種連接方法也有NL連接中所謂的驅(qū)動(dòng)表的概念,被構(gòu)建為hash table與bitmap的表為驅(qū)動(dòng)表,當(dāng)被構(gòu)建的hash table與bitmap能被容納在內(nèi)存中時(shí),這種連接方式的效率極高。

4、笛卡兒乘積(Cartesian Product)

當(dāng)兩個(gè)row source做連接,但是它們之間沒(méi)有關(guān)聯(lián)條件時(shí),就會(huì)在兩個(gè)row source中做笛卡兒乘積,這通常由編寫代碼疏漏造成(即程序員忘了寫關(guān)聯(lián)條件)。笛卡爾乘積是一個(gè)表的每一行依次與另一個(gè)表中的所有行匹配。在特殊情況下我們可以使用笛卡兒乘積,如在星形連接中,除此之外,我們要盡量不使用笛卡兒乘積。

不同情況下我們采用的Oracle表連接方式也是不同的,對(duì)于非等值連接,排序——合并連接的方式效率是比較高的,而哈希連接只能用于等值連接中。如果外部表比較小,并且在內(nèi)部表上有唯一索引,或有高選擇性非唯一索引時(shí),選擇嵌套循環(huán)。在本站的Oracle教程中,對(duì)于如何選擇Oracle數(shù)據(jù)庫(kù)表連接方式有一套系統(tǒng)的方法供大家學(xué)習(xí)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 天天插在线视频 | 亚洲日本一区二区 | 国产一区高清视频 | 日本中文字幕在线视频 | 蜜臀91精品国产高清在线观看 | 一个人看的视频www在线看 | 欧美精品福利 | 精品国产v无码大片在线观看 | 亚洲第一欧美 | 亚洲夜夜操 | yy4138理论片在线大全 | 99热色| 日日射日日操 | 亚洲高清免费观看 | 黄色一级国产 | 可以免费看的黄色网址 | 免费在线视频a | 97狠狠| 尼龙丝袜社区aaaaa视频 | 欧美国产亚洲精品a第一页 欧美国产在线观看 | 在线精品国产第一页 | 最近中文字幕2019国语7 | 日韩国产欧美一区二区三区 | 特级毛片www俄罗斯免 | 国产日韩欧美在线播放 | 欧美香蕉视频 | 国产一级黄色大片 | 成人免费视频无遮挡在线看 | 人人成人免费公开视频 | 91久久国产青草亚洲 | 免费看v片网站 | 美女高清特黄a大片 | 两个人看的www中文字幕 | 成人在线a | 欧美日中文字幕 | 色噜噜狠狠狠狠色综合久一 | 久久精品国产半推半就 | 亚洲天堂欧美 | 男女羞羞视频免费观看 | 怡红院免费手机在线观看 | 久久怡红院国产精品 |