查詢最佳化器支援三種基礎 JOIN 演算法:Nested Loop、Sort-Merge、Hash Join。理解其原理與代價模型,才能正確解讀執行計畫並進行調優。
R (M 頁) 與 S (N 頁)r, s;JOIN 欄位為 i, jforeach r in R:
foreach s in S:
if r.i == s.j: add to result
M + M × N(外層掃描 M 頁 + 內層重複掃描 N 頁 M 次)
O(M + N) — 單掃描O(M log M + N log N + M×N) — 雙排序 + 笛卡兒積GROUP BY/ORDER BY 可重用排序結果僅支援 等值聯結(雜湊函數決定性)
S 依 JOIN 欄位建立記憶體雜湊表,同鍵值串成桶R,雜湊定位桶,逐一比對輸出O(M + N × b),b 為平均桶大小
INNER/LEFT/RIGHT/FULL OUTER JOIN、INTERSECT、EXCEPTDISTINCT、GROUP BY(單輸入兼 Build/Probe)掌握三大演算法特性,配合索引設計與統計維護,即能引導最佳化器產出高效執行計畫。