表連線概念

edwardking888發表於2010-05-13

表連線概念

 

Hash join

它的連線方式﹐Oracle將第一個表加載入記憶體﹐使用一種Hash

朮﹐連線第二個表. 顯然驅動表應該選擇兩者中的較小者。

因為CBO總是傾向於把HASH連線放在次要地位﹐我們可以用

USE_HASH提示﹐強制優化器使用HASH連線方式。由於HASH

法的使用﹐索引的存在對效能的影響不是很大。

 

Nested loop

 

即巢狀迴圈連線﹐是一種是最基本的表連線方式﹐在巢狀迴圈

中﹐首先從驅動表讀取記錄﹐然後把結果集與第二個表進行比較

連線﹐如圖所示,這一切都是通過索引來進行的﹐如果沒有索引﹐

連線成本會大大地增加。

在考慮連線順序時﹐應該把最小的表作為驅動表。

在內部表上建有可用的索引的時候﹐應該首先考慮使用Nested Loop

 

Sort merge join

它不使用索引﹐它用全表掃描獲得兩個資料集合﹐然後將它們

分別排序後﹐合併成為一個最終的結果集。

注意到排序合併連線中並沒有使用索引是非常重要的。在大多數

情況下﹐通過索引訪問更快一些﹐但是當連線表中需要有大量資料

的處理和返回﹐大量的全表掃描﹐或者表上沒有建立索引的話﹐可

以考慮使用Sort merge join

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-662604/,如需轉載,請註明出處,否則將追究法律責任。

相關文章