Oracle 三種表連線演算法總結

2022-04-09 09:35:29 字數 754 閱讀 7073

[oracle]三種表連線演算法總結

oracle有三種表連線技術,分別是巢狀連線、合併連線和雜湊連線。

1. 巢狀迴圈連線 (nested loop join)

巢狀連線把要處理的資料集分為外迴圈(驅動資料來源)和內迴圈(被驅動資料來源),外迴圈只執行一次(先執行),內迴圈執行的次數等於外迴圈執行的資料集個數。

這種連線的好處是記憶體使用非常少。

如果驅動資料來源有限,且被驅動表在連線列上有相應的索引,則這種連線方式才是高效的。

在oltp系統上常見到這種連線方式。

2. 排序合併連線 (sort merge join)

顧名思義,排序合併就是先分別對待連線的資料集進行排序,然後再合併,其執行過程大致為:對錶a的資料集進行排序,排序結果儲存的工作區a中;對錶b的資料集進行排序,排序結果儲存在工作區b中;最後合併工作區a和b中的資料。

對這種連線方法,排序的開銷是非常大的,和排序工作區相關的記憶體引數有:sort_area_size和sort_area_retained_size,都在在pga中。

3. 雜湊連線 (hash join)

雜湊連線處理的兩個資料集分別稱為構造輸入(build input)和探測輸入(probe input),構造輸入的每行記錄用於構造雜湊表,探測輸入的每行記錄對雜湊表進行探測,以找出符合連線條件的記錄。

將較小的表作為構造輸入,較大的表作為探測輸入,這樣雜湊連線的效率才比較高,在執行計畫中,較小的輸入表在前面,較大的探測表在後面。

雜湊連線只有在相等連線的條件下才能進行。

Oracle 三種表連線演算法總結

oracle有三種表連線技術,分別是巢狀連線 合併連線和雜湊連線。巢狀連線把要處理的資料集分為外迴圈 驅動資料來源 和內迴圈 被驅動資料來源 外迴圈只執行一次 先執行 內迴圈執行的次數等於外迴圈執行的資料集個數。這種連線的好處是記憶體使用非常少。如果驅動資料來源有限,且被驅動表在連線列上有相應的索引...

oracle三種表連線方式

nested loop 對於被連線的資料子集較小的情況,nested loop連線是個較好的選擇。nested loop就是掃瞄乙個表,每讀到一條記錄,就根據索引去另乙個表裡面查詢,沒有索引一般就不會是 nested loops。一般在nested loop中,驅動表滿足條件結果集不大,被驅動表的連...

oracle 三種表連線方式

oracle 小知識 1.oracle 檢視表大小 select sum t.bytes 1024 1024 1024 from dba segments t where t.segment name tt tsfr fuzzy abnormal 2.強制走全表掃瞄和索引 full tt conve...