快速瞭解Oracle雜湊串連____Oracle

來源:互聯網
上載者:User
快速瞭解Oracle雜湊串連

[導讀]這裡介紹要使Oracle雜湊串連有效,需要設定HASH_JOIN_ENABLED=TRUE,預設情況下該參數為TRUE,另外,不要忘了還要設定 hash_area_size參數。

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

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

  如果driving row source(外部表格)比較小,並且在inner row source(內部表)上有唯一索引,或有高選擇性非唯一索引時,使用這種方法可以得到較好的效率。NESTED LOOPS有其它串連方法沒有的的一個優點是:可以先返回已經串連的行,而不必等待所有的串連操作處理完才返回資料,這可以實現快速的回應時間。

  如果不使用並行操作,最好的驅動表是那些應用了where 限制條件後,可以返回較少行資料的的表,所以大表也可能稱為驅動表,關鍵看限制條件。對於並行查詢,我們經常選擇大表作為驅動表,因為大表可以充分利用並行功能。當然,有時對查詢使用並行操作並不一定會比查詢不使用並行操作效率高,因為最後可能每個表只有很少的行符合限制條件,而且還要看你的硬體設定是否可以支援並行(如是否有多個CPU,多個硬碟控制器),所以要具體問題具體對待。

  

  NL串連的例子:

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

  Oracle雜湊串連(Hash Join, HJ)

  這種串連是在oracle 7.3以後引入的,從理論上來說比NL與SMJ更高效,而且只用在CBO最佳化器中。

  較小的row source被用來構建hash table與bitmap,第2個row source被用來被hansed,並與第一個row source產生的hash table進行匹配,以便進行進一步的串連。Bitmap被用來作為一種比較快的尋找方法,來檢查在hash table中是否有匹配的行。特別的,當hash table比較大而不能全部容納在記憶體中時,這種尋找方法更為有用。這種串連方法也有NL串連中所謂的驅動表的概念,被構建為hash table與bitmap的表為驅動表,當被構建的hash table與bitmap能被容納在記憶體中時,這種串連方式的效率極高。

  

  HASH串連的例子:

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

  要使Oracle雜湊串連有效,需要設定HASH_JOIN_ENABLED=TRUE,預設情況下該參數為TRUE,另外,不要忘了還要設定 hash_area_size參數,以使Oracle雜湊串連高效運行,因為Oracle雜湊串連會在該參數指定大小的記憶體中運行,過小的參數會使Oracle雜湊串連的效能比其他串連方式還要低。

  總結一下,在哪種情況下用哪種串連方法比較好:

  排序 - - 合并串連(Sort Merge Join, SMJ):

  a) 對於非等值串連,這種串連方式的效率是比較高的。

  b) 如果在關聯的列上都有索引,效果更好。

  c) 對於將2個較大的row source做串連,該串連方法比NL串連要好一些。

  d) 但是如果sort merge返回的row source過大,則又會導致使用過多的rowid在表中查詢資料時,資料庫效能下降,因為過多的I/O。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.