巢狀迴圈連線 Nested Loops Join

2021-10-08 22:38:58 字數 903 閱讀 5496

巢狀迴圈連線(nested loops join)是一種兩個表在做表連線時依靠兩層巢狀迴圈(分別為外層迴圈和記憶體迴圈)來得到連線結果集的表連線方法。

即外層迴圈對應的驅動結果集有多少條記錄,遍歷被驅動表的內層迴圈就要做多少次

,這就是所謂的「巢狀迴圈」的含義。

對於巢狀迴圈連線的優缺點及適用場景如下:

a,如果驅動表所

對應的驅動結果集的記錄數較少

,同時在被驅動表

的連線列上又存在唯一性索引(或者在被驅動表的連線列上存在選擇性

好的非唯一性索引),那麼此時使用巢狀循

環連線的執行效率就會非常高;

但如果驅動表所對應

的驅動結果集的記錄數很多,即便在被驅動表的連線列上存在索引,此時使用巢狀迴圈連線的執行效率也不會很

高。b,大表也可以作為巢狀迴圈連線的驅動表,

關鍵是看目標sql中指定的謂詞條件(如果有的話)能否將驅動結果集的記錄集數量大幅度的降

下來。c,巢狀迴圈連線有其他連線方法所沒有的乙個優點:

巢狀迴圈連線可以實現快速響應

。因為排

序合併連線需要等到排序完後做合併操作時才能開始返回資料

,而雜湊連

接則也等到驅動結果集所對應的hash table全部構建完後才能開始返回資料。

oracle表之間的連線之巢狀迴圈連線(nested loops join),其特點如下:

1,驅動表返回幾天記錄,被驅動表就被訪問多少次。

2,巢狀迴圈表連線的表有驅動順序。

3,巢狀迴圈表連線的表無需要排序。

4,巢狀迴圈表連線的表沒有任何限制場景,即任何sql語句都可以用巢狀迴圈表連線的表都可以用巢狀迴圈連線進行運算元據庫。

5,其sql語句的優化原則是:驅動表的限制條件的字段上需要有索引,被驅動表的連線條件的字段上需要有索引。

Oracle 巢狀迴圈 雜湊連線

假設我們現在有一條語句,執行的時間需要半個小時,即使我們僅僅需要知道該語句的執行計畫,此種情況下,我們必須等待半個小時。因此,如果查詢的效能很慢,我們可以選擇選擇使用explain plan for select from table dbms xplan.display 命令。select use...

Mysql巢狀迴圈連線演算法

迴圈連線演算法分為兩種 1.巢狀迴圈連線演算法 2.塊巢狀迴圈連線演算法乙個簡單的巢狀迴圈連線 nlj 演算法從乙個迴圈中的第乙個表中讀取一行中的行,將每行傳遞給巢狀迴圈,以處理連線中的下乙個表。該過程重複多次,因為還有待連線的表。假設三個表之間的連線 t1,t2以及 t3,那麼nlj演算法會這麼來...

Oracle表連線之巢狀迴圈

在資料庫系統中執行乙個查詢sql語句,如果這個查詢只操作一張表,那麼僅僅涉及到這個表及關聯物件的訪問。訪問方式通常是三種 全表掃瞄 全索引掃瞄和索引掃瞄。如果這個查詢操作兩張及以上的表,那麼需要操作的表之間的連線關係就變得至關重要。資料庫系統執行該sql時,永遠都是兩個結果集關聯。例如,操作三張表,...