1、 排序合並連接(Sort Merge Join)
排序合並連接的執行過程如下所示:
* 將每個行源的行按連接謂詞列排序
* 然后合並兩個已排序的行源,並返回生成的行源
例如:
select * from employees d,departments t where d.department_id=t.department_id;
訪問機制如下:訪問departments表並排序department_id列,訪問employees表並排序department_id列,然后依次交替比較、歸並。
注意:排序合並連接一般用在兩張表中沒有索引,並且連接列已經排好序的情況下。
2、嵌套循環連接(Nested Loops Join)
* 兩個表中的一個被定義為“外部表”(或“驅動表”)
* 另一個表被稱為“內部表”
* 將針對外部表中的每一行檢索內部表中所有匹配的行
注意:join的順序很重要,一般選擇小表作為“驅動表”,大表作為“內部表”。如兩個表,一個100行,一個10000行,理想的連接方式是:100行的小表作為“驅動表”,10000行的大表作為“內部表”,用小表中的每條記錄去匹配大表中的記錄。如果兩張表的連接詞在大表中是索引列,則是最完美的。
3、 哈希連接(Hash Join)
* 優化器對小表利用連接鍵在內存中建立hash表
* 掃描大表,每得到一條記錄,就來hash表中“探測”一次,找出與hash表匹配的行
注意:Hash Join 是CBO做大數據集連接時的常用方式。