自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

快速了解Oracle哈希連接

數(shù)據(jù)庫(kù) Oracle
這里介紹要使Oracle哈希連接有效,需要設(shè)置HASH_JOIN_ENABLED=TRUE,缺省情況下該參數(shù)為T(mén)RUE,另外,不要忘了還要設(shè)置 hash_area_size參數(shù)。

在向大家詳細(xì)介紹Oracle哈希連接之前,首先讓大家了解下Oracle讀取row source,然后全面介紹Oracle哈希連接,希望對(duì)大家有用。在NESTED LOOPS連接中,Oracle讀取row source1中的每一行,然后在row sourc2中檢查是否有匹配的行,所有被匹配的行都被放到結(jié)果集中,然后處理row source1中的下一行。

這個(gè)過(guò)程一直繼續(xù),直到row source1中的所有行都被處理。這是從連接操作中可以得到第一個(gè)匹配行的最快的方法之一,這種類(lèi)型的連接可以用在需要快速響應(yīng)的語(yǔ)句中,以響應(yīng)速度為主要目標(biāo)。

如果driving row source(外部表)比較小,并且在inner row source(內(nèi)部表)上有唯一索引,或有高選擇性非唯一索引時(shí),使用這種方法可以得到較好的效率。NESTED LOOPS有其它連接方法沒(méi)有的的一個(gè)優(yōu)點(diǎn)是:可以先返回已經(jīng)連接的行,而不必等待所有的連接操作處理完才返回?cái)?shù)據(jù),這可以實(shí)現(xiàn)快速的響應(yīng)時(shí)間。

如果不使用并行操作,最好的驅(qū)動(dòng)表是那些應(yīng)用了where 限制條件后,可以返回較少行數(shù)據(jù)的的表,所以大表也可能稱(chēng)為驅(qū)動(dòng)表,關(guān)鍵看限制條件。對(duì)于并行查詢(xún),我們經(jīng)常選擇大表作為驅(qū)動(dòng)表,因?yàn)榇蟊砜梢猿浞掷貌⑿泄δ?。?dāng)然,有時(shí)對(duì)查詢(xún)使用并行操作并不一定會(huì)比查詢(xún)不使用并行操作效率高,因?yàn)樽詈罂赡苊總€(gè)表只有很少的行符合限制條件,而且還要看你的硬件配置是否可以支持并行(如是否有多個(gè)CPU,多個(gè)硬盤(pán)控制器),所以要具體問(wèn)題具體對(duì)待。

NL連接的例子:

  1. SQL> explain plan for  
  2. select a.dname,b.sql  
  3. from dept a,emp b  
  4. where a.deptno = b.deptno;  
  5. Query Plan  
  6. SELECT STATEMENT [CHOOSE] Cost=5 
  7. NESTED LOOPS  
  8. TABLE ACCESS FULL DEPT [ANALYZED]  
  9. TABLE ACCESS FULL EMP [ANALYZED] 

Oracle哈希連接(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í),這種連接方式的效率極高。

HASH連接的例子:

  1. SQL> explain plan for  
  2. select /*+ use_hash(emp) */ empno  
  3. from emp, dept  
  4. where emp.deptno = dept.deptno;  
  5. Query Plan  
  6. SELECT STATEMENT [CHOOSE] Cost=3 
  7. HASH JOIN  
  8. TABLE ACCESS FULL DEPT  
  9. TABLE ACCESS FULL EMP 

要使Oracle哈希連接有效,需要設(shè)置HASH_JOIN_ENABLED=TRUE,缺省情況下該參數(shù)為T(mén)RUE,另外,不要忘了還要設(shè)置 hash_area_size參數(shù),以使Oracle哈希連接高效運(yùn)行,因?yàn)镺racle哈希連接會(huì)在該參數(shù)指定大小的內(nèi)存中運(yùn)行,過(guò)小的參數(shù)會(huì)使Oracle哈希連接的性能比其他連接方式還要低。

總結(jié)一下,在哪種情況下用哪種連接方法比較好:

排序 - - 合并連接(Sort Merge Join, SMJ):
a) 對(duì)于非等值連接,這種連接方式的效率是比較高的。
b) 如果在關(guān)聯(lián)的列上都有索引,效果更好。
c) 對(duì)于將2個(gè)較大的row source做連接,該連接方法比NL連接要好一些。
d) 但是如果sort merge返回的row source過(guò)大,則又會(huì)導(dǎo)致使用過(guò)多的rowid在表中查詢(xún)數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)性能下降,因?yàn)檫^(guò)多的I/O。

【編輯推薦】

  1. 快速了解Oracle哈希連接
  2. 詳細(xì)談?wù)揙racle表連接
  3. 分析Oracle索引掃描四大類(lèi)
  4. 高手閑談Oracle索引掃描
  5. 六分鐘學(xué)會(huì)Oracle全表掃描
責(zé)任編輯:佚名 來(lái)源: NET130
相關(guān)推薦

2009-11-17 09:47:54

Oracle SQL語(yǔ)

2015-08-26 16:17:49

OpenStack OpenStack 架開(kāi)源云平臺(tái)

2021-09-15 07:46:42

哈希一致性哈希算法

2016-12-30 13:43:35

異步編程RxJava

2021-11-22 22:14:46

JavaScript開(kāi)發(fā)模塊

2023-11-06 09:24:14

CSS相對(duì)顏色

2022-08-04 18:50:12

Navigator瀏覽器設(shè)備

2010-11-19 16:22:14

Oracle事務(wù)

2009-11-12 10:05:09

Visual C++

2010-01-12 10:23:52

路由最佳路徑

2010-10-25 09:39:43

Oracle FBI索

2010-10-25 15:04:39

Oracle文本函數(shù)

2010-10-29 15:37:51

Oracle物理結(jié)構(gòu)

2010-11-15 10:40:58

Oracle啟動(dòng)參數(shù)

2010-11-15 13:20:06

Oracle恢復(fù)結(jié)構(gòu)

2010-10-28 13:20:50

ORACLE reso

2009-11-16 17:41:46

Oracle數(shù)據(jù)塊

2010-10-26 11:55:21

Oracle OS備份

2010-11-15 11:40:44

Oracle表空間

2009-11-17 09:31:06

Oracle Dual
點(diǎn)贊
收藏

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