成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談Oracle中的三種Join方法

數(shù)據(jù)庫(kù) Oracle 數(shù)據(jù)庫(kù)運(yùn)維
這里將為大家介紹Oracle中的三種Join方法,Nested loop join、Sort merge join和Hash join。整理出來(lái)以便幫助大家學(xué)習(xí)。

基本概念

Nested loop join:

Outer table中的每一行與inner table中的相應(yīng)記錄join,類似一個(gè)嵌套的循環(huán)。

Sort merge join:

將兩個(gè)表排序,然后再進(jìn)行join。

Hash join:

將兩個(gè)表中較小的一個(gè)在內(nèi)存中構(gòu)造一個(gè)Hash 表(對(duì)Join Key),掃描另一個(gè)表,同樣對(duì)Join Key進(jìn)行Hash后探測(cè)是否可以join,找出與之匹配的行。

一張小表被hash在內(nèi)存中。因?yàn)閿?shù)據(jù)量小,所以這張小表的大多數(shù)數(shù)據(jù)已經(jīng)駐入在內(nèi)存中,剩下的少量數(shù)據(jù)被放置在臨時(shí)表空間中;

每讀取大表的一條記錄,就和小表中內(nèi)存中的數(shù)據(jù)進(jìn)行比較,如果符合,則立即輸出數(shù)據(jù)(也就是說(shuō)沒(méi)有讀取臨時(shí)表空間中的小表的數(shù)據(jù))。而如果大表的數(shù)據(jù)與小表中臨時(shí)表空間的數(shù)據(jù)相符合,則不直接輸出,而是也被存儲(chǔ)臨時(shí)表空間中。

當(dāng)大表的所有數(shù)據(jù)都讀取完畢,將臨時(shí)表空間中的數(shù)據(jù)以其輸出。如果小表的數(shù)據(jù)量足夠?。ㄐ∮趆ash area size),那所有數(shù)據(jù)就都在內(nèi)存中了,可以避免對(duì)臨時(shí)表空間的讀寫(xiě)。

如果是并行環(huán)境下,前面中的第2步就變成如下了:每讀取一條大表的記錄,和內(nèi)存中小表的數(shù)據(jù)比較,如果符合先做join,而不直接輸出,直到整張大表數(shù)據(jù)讀取完畢。如果內(nèi)存足夠,Join好的數(shù)據(jù)就保存在內(nèi)存中。否則,就保存在臨時(shí)表空間中。

適用范圍

Nested loop join:

適用于outer table(有的地方叫Master table)的記錄集比較少(<10000)而且inner table(有的地方叫Detail table)索引選擇性較好的情況下(inner table要有index)。

inner table被outer table驅(qū)動(dòng),outer table返回的每一行都要在inner table中檢索到與之匹配的行。當(dāng)然也可以用ORDERED 提示來(lái)改變CBO默認(rèn)的驅(qū)動(dòng)表,使用USE_NL(table_name1 table_name2)可是強(qiáng)制CBO 執(zhí)行嵌套循環(huán)連接。

cost  = outer access cost + (inner access cost * outer cardinality)

Sort merge join:

用在數(shù)據(jù)沒(méi)有索引但是已經(jīng)排序的情況下。

通常情況下hash join的效果都比Sort merge join要好,然而如果行源已經(jīng)被排過(guò)序,在執(zhí)行排序合并連接時(shí)不需要再排序了,這時(shí)Sort merge join的性能會(huì)優(yōu)于hash join??梢允褂肬SE_MERGE(table_name1 table_name2)來(lái)強(qiáng)制使用Sort merge join。
cost = (outer access cost * # of hash partitions) + inner access cost

Hash join:

適用于兩個(gè)表的數(shù)據(jù)量差別很大。但需要注意的是:如果HASH表太大,無(wú)法一次構(gòu)造在內(nèi)存中,則分成若干個(gè)partition,寫(xiě)入磁盤(pán)的temporary segment,則會(huì)多一個(gè)I/O的代價(jià),會(huì)降低效率,此時(shí)需要有較大的temporary segment從而盡量提高I/O的性能。

可以用USE_HASH(table_name1 table_name2)提示來(lái)強(qiáng)制使用散列連接。如果使用散列連HASH_AREA_SIZE 初始化參數(shù)必須足夠的大,如果是9i,Oracle建議使用SQL工作區(qū)自動(dòng)管理,設(shè)置WORKAREA_SIZE_POLICY 為AUTO,然后調(diào)整PGA_AGGREGATE_TARGET 即可。

也可以使用HASH_JOIN_ENABLED=FALSE(默認(rèn)為T(mén)RUE)強(qiáng)制不使用hash join。

cost = (outer access cost * # of hash partitions) + inner access cost

效率比較

Hash join的主要資源消耗在于CPU(在內(nèi)存中創(chuàng)建臨時(shí)的hash表,并進(jìn)行hash計(jì)算),而merge join的資源消耗主要在于磁盤(pán)I/O(掃描表或索引)。在并行系統(tǒng)中,hash join對(duì)CPU的消耗更加明顯。所以在CPU緊張時(shí),最好限制使用hash join。

在絕大多數(shù)情況下,hash join效率比其他join方式效率更高:

在Sort-Merge Join(SMJ),兩張表的數(shù)據(jù)都需要先做排序,然后做merge。因此效率相對(duì)最差;
Nested-Loop Join(NL)效率比SMJ更高。特別是當(dāng)驅(qū)動(dòng)表的數(shù)據(jù)量很大(集的勢(shì)高)時(shí)。這樣可以并行掃描內(nèi)表。
Hash join效率最高,因?yàn)橹灰獙?duì)兩張表掃描一次。

【編輯推薦】

  1. MySQL中Join算法實(shí)現(xiàn)原理分析
  2. 通往性能優(yōu)化的JOIN方法說(shuō)明
  3. SQL中的JOIN的簡(jiǎn)潔解釋
責(zé)任編輯:彭凡 來(lái)源: sina博客
相關(guān)推薦

2009-07-16 16:23:59

Swing線程

2010-11-16 16:11:28

Oracle身份驗(yàn)證

2013-01-10 10:26:56

SQL Server數(shù)據(jù)庫(kù)

2010-10-28 10:27:35

oracle賦權(quán)

2010-11-19 14:51:09

Oracle數(shù)據(jù)庫(kù)關(guān)閉

2010-11-15 14:42:03

Oracle查詢重復(fù)記

2011-05-26 13:16:37

Oracle數(shù)據(jù)庫(kù)備份

2022-08-24 08:07:11

MyBatisSQLMySQL

2021-12-20 07:11:26

Java List排序 Java 基礎(chǔ)

2009-06-29 18:21:29

Hibernate

2010-09-08 13:29:48

CSS

2009-07-08 12:56:32

編寫(xiě)Servlet

2011-05-20 17:08:32

2019-08-30 17:24:41

microservic微服務(wù)

2022-05-31 16:00:46

Go 編程語(yǔ)言復(fù)制文件Go 標(biāo)準(zhǔn)庫(kù)

2022-05-30 07:07:35

Java監(jiān)聽(tīng)文件Java 8

2023-10-13 00:00:00

Redis模塊空間對(duì)象

2010-09-14 15:10:49

CSS注釋

2016-09-30 01:10:12

R語(yǔ)言聚類方法

2024-11-15 07:00:00

Python發(fā)送郵件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产乱码久久久久久一区二区 | 日韩中文字幕av | 午夜免费视频观看 | 日韩视频一区二区在线 | 亚洲av毛片成人精品 | av无遮挡 | 精品成人免费一区二区在线播放 | 狠狠做深爱婷婷综合一区 | 久久一区视频 | 亚洲女人天堂成人av在线 | www.亚洲视频.com | 亚洲国产一区二区三区 | 91看片免费版 | 日韩综合一区 | 91国产视频在线 | 91中文字幕在线 | 羞视频在线观看 | 久久久久久久久久久久久久久久久久久久 | 精品一区二区三区日本 | 成在线人视频免费视频 | 日韩精品在线播放 | 成人毛片一区二区三区 | www.久久99| 欧美精品久久久久 | 午夜看电影在线观看 | 无码一区二区三区视频 | 国产1区| 国产精品入口麻豆www | 欧美日韩国产中文 | 亚洲激情在线观看 | 国产精品久久久久无码av | 99精品国产一区二区青青牛奶 | 国产91网址 | 在线观看亚洲 | 亚洲国产免费 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 人人99 | 久久精品久久久 | 国产乱码精品一区二三赶尸艳谈 | 精品视频一二区 | 欧美另类日韩 |