Oracle 的鏈接方式

一、 嵌套循環連接(Nested Loop)

其主要是選擇出一張表作爲外表,然後循環外表,並且每一個外表中的記錄又在內表中作循環。

嵌套循環連接的工作方式是這樣的:
1、 Oracle首先選擇一張表作爲連接的驅動表,這張表也稱爲外部表(Outer Table)。由驅動表進行驅動連接的表或數據源稱爲內部表(Inner Table)。
2、 提取驅動表中符合條件的記錄,與被驅動表的連接列進行關聯查詢符合條件的記錄。在這個過程中,Oracle首先提取驅動表中符合條件的第一條記錄,再與內部表的連接列進行關聯查詢相應的記錄行。在關聯查詢的過程中,Oracle會持續提取驅動表中其他符合條件的記錄與內部表關聯查詢。這兩個過程是並行進行的,因此嵌套循環連接返回前幾條記錄的速度是非常快的。在這裏需要說明的是,由於Oracle最小的IO單位爲單個數據塊,因此在這個過程中Oracle會首先提取驅動表中符合條件的單個數據塊中的所有行,再與內部表進行關聯連接查詢的,然後提取下一個數據塊中的記錄持續地循環連接下去。當然,如果單行記錄跨越多個數據塊的話,就是一次單條記錄進行關聯查詢的。

二、 排序合併連接(Sort Merge)

其主要是連接的表排序,然後根據排序結果進行連接。
   排序合併連接的方法非常簡單。在排序合併連接中是沒有驅動表的概念的,兩個互相連接的表按連接列的值先排序,排序完後形成的結果集再互相進行合併連接提取符合條件的記錄。相比嵌套循環連接,排序合併連接比較適用於返回大數據量的結果。

三、 哈希連接(Hash join)

其主要是兩張表都先根據條件進行選擇,然後,選擇出一張表作爲外表,然後再另一張表已經查詢結束的結果集中進行檢索。
    哈希連接分爲兩個階段,如下。
1、 構建階段:優化器首先選擇一張小表做爲驅動表,運用哈希函數對連接列進行計算產生一張哈希表。通常這個步驟是在內存(hash_area_size)裏面進行的,因此運算很快。
2、 探測階段:優化器對被驅動表的連接列運用同樣的哈希函數計算得到的結果與前面形成的哈希表進行探測返回符合條件的記錄。這個階段中如果被驅動表的連接列的值沒有與驅動表連接列的值相等的話,那麼這些記錄將會被丟棄而不進行探測。

四、 Filter

Filter 的工作方式是,先全表掃描兩張表,然後做笛卡爾積,之後再進行查詢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章