大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

4種Oracle表連接方式

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

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

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

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

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

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

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

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按照連接條件連接起來

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

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

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

較小的row source被用來構(gòu)建hash table與bitmap,第2個(gè)row source被用來被hansed,并與第一個(gè)row source生成的hash table進(jìn)行匹配,以便進(jìn)行進(jìn)一步的連接。Bitmap被用來作為一種比較快的查找方法,來檢查在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做連接,但是它們之間沒有關(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ù)庫表連接方式有一套系統(tǒng)的方法供大家學(xué)習(xí)。

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产福利在线看 | 曰韩毛片 | 视频一区二区欧美日韩在线 | 亚洲视屏一区 | 人人狠狠综合久久亚洲88 | 奇米影视7777久久精品 | 亚洲国产精品看片在线观看 | 99久久免费国产香蕉麻豆 | 国内精品自在自线视频香蕉 | 国产欧美日韩精品一区二区三区 | 日韩一区二区免费视频 | 日韩麻豆国产精品欧美 | 成人老司机深夜福利久久 | 99国产欧美久久精品 | 中文字幕久久精品 | 日本不卡中文字幕一区二区 | 国产精品视频福利视频网 | 日本aⅴ在线不卡免费观看 日本aaaa | 日本无吗中文字幕免费婷婷 | 中文字幕 二区 三区 搜查官 | 简单视频在线播放jdav | 在线成人国产 | 性欧美日韩 | 亚洲精品视频一区 | 久久精品国产一区二区 | 国产成人精品永久免费视频 | 美女一级a毛片免费观看 | 久久久久国产精品免费免费不卡 | 亚洲综合网址 | xxxx久久| 乱人伦中文字幕在线看 | 色综合色综合色综合色综合网 | 99热最新网址获取 | 猫咪视频成人永久免费观看 | 国产精品人伦久久 | 爱操综合 | 亚洲欧美日韩在线不卡 | 精品国产乱码久久久久久浪潮 | 日本阿v精品视频在线观看 日本爱爱免费视频 | 日韩精品视频观看 | 免费的成人a视频在线观看 免费的黄色网 |