- Loop Join (巢狀回圈聯結)
- 透過兩個查尋資料量(大與小),觀察資料量對執行影響
- 驗證 "Loop Join" 的運作模式與使用的最佳時機
- 資料庫使用 Adventure Works for SQL Server 2012 的資料表 Production.Product 與 Sales.SalesOrderDetail 創建兩個 table 如下
- tbProduct
- unique Clustered index:ProductID
- tbSalesOrderDetail
- unique Clustered index:SalesOrderID, SalesOrderDetailID
- NonClustered:ProductID
select od.SalesOrderID,
od.SalesOrderDetailID,
p.Name
from tbSalesOrderDetail od
join tbProduct p ON od.ProductID = p.ProductID
where p.ProductID between 770 and 773
select od.SalesOrderID,
od.SalesOrderDetailID,
p.Name
from tbSalesOrderDetail od
join tbProduct p ON od.ProductID = p.ProductID
where p.ProductID between 770 and 800
- 查詢結果
- 查詢 1:查詢範圍 ProductID 770 ~ 773 (小量資料),採用 "Loop Join" 適合小量資料查詢
- 查詢 2:查詢範圍 ProductID 770 ~ 800 (大量資料),採用 "Merge Join"
- tbProduct 與 tbSalesOrderDetail 屬於 "一對多" 的關係,tbProduct 資料量必小於 tbSalesOrderDetail ,查詢 1的 "Loop Join" 是使用 tbProduct 當 "外部輸入" 而 tbSalesOrderDetail 當 "內部輸入"
- Result:
- "Loop Join" 中的 "外部輸入" 資料列應該較少,而 "內部資料" 資料列較多,在 "外部輸入" 讀取資料後至 "內部資料" 找尋符合的資料列
- "Loop Join" 適合查詢條件資料列較少的情況使用,否則會採用 "雜湊聯結" 或 "合併聯結"
- REF:
沒有留言:
張貼留言