星期日, 11月 21, 2021

[SQL] Nested Loops Join

Join 有三種主要演算法,分別為 Nested Loops、Merge Join 和 Hash Join,該篇紀錄 Nested Loops 相關

閱讀 Nested Loops 要先了解 Outer Table (執行計畫上方) 和 Ineer Table (執行計畫下方) 運作方式,會先從 Outer Table 取出一筆符合篩選條件資料後,去 Inner Table 內尋找符合篩選條件的資料,從程式角度來看,像是從 Outer Table 跑 foreach, 一筆一筆進 Inner Table 內把對應篩選資料抓出來

下面兩張圖為 [TSQL] 和 [執行計畫] Outer Table 和 Inner Table 對應,Outer Table 和 Inner Table 要從執行計畫去觀察,無法從 TSQL 得知,TSQL 圖片只是方便對應了解 



另外一個常見的 Nested Loops 情況就是 Key Lookup,當 nonclustered index 沒有辦法滿足所需資料,就會透過 Nested Loops 跑 Key Lookup 去取回所需資料
SELECT * 
FROM Person.Person
WHERE LastName = 'Duffy'

觀察 Nested Loops 要注意 Outer Table 資料量,基本上會希望 Outer Table 要從資料量小的開始,Turning 時剛好發現一個案例,Outer Table 資料量大於 Inner Table

沒有留言:

張貼留言