日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
快速了解Oracle哈希連接

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

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

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

如果不使用并行操作,最好的驅(qū)動表是那些應(yīng)用了where 限制條件后,可以返回較少行數(shù)據(jù)的的表,所以大表也可能稱為驅(qū)動表,關(guān)鍵看限制條件。對于并行查詢,我們經(jīng)常選擇大表作為驅(qū)動表,因為大表可以充分利用并行功能。當然,有時對查詢使用并行操作并不一定會比查詢不使用并行操作效率高,因為最后可能每個表只有很少的行符合限制條件,而且還要看你的硬件配置是否可以支持并行(如是否有多個CPU,多個硬盤控制器),所以要具體問題具體對待。

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以后引入的,從理論上來說比NL與SMJ更高效,而且只用在CBO優(yōu)化器中。

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

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ù)為TRUE,另外,不要忘了還要設(shè)置 hash_area_size參數(shù),以使Oracle哈希連接高效運行,因為Oracle哈希連接會在該參數(shù)指定大小的內(nèi)存中運行,過小的參數(shù)會使Oracle哈希連接的性能比其他連接方式還要低。

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

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


文章名稱:快速了解Oracle哈希連接
瀏覽地址:http://m.5511xx.com/article/cdoegcc.html