作者分享從 800 萬核心表、3000 萬大表、光纖存儲、週備份的實戰經驗,強調理解 JOIN 算法原理比背誦技巧更重要。SQL Server / Oracle / MySQL 核心原理相通,深入理解可遷移至架構設計。
SQL Server 2000 與 Oracle 均支援三種,但選擇條件因記憶體管理不同而異(Oracle 偏好 Nested Loop)。
優點:三種 JOIN 中記憶體與 CPU 消耗最低(除非強制指定不當)。
SELECT ... FROM TableA INNER JOIN TableB ON TableA.Col1 = TableB.Col1
WHERE TableA.Col2 = ? AND TableB.Col2 = ?
TableA.Col2 = ? 篩選 → 輸出符合行TableB.Col1 = rowA.Col1 AND TableB.Col2 = ? → 直接讀取資料列因 Clustered Index 葉節點即資料列,TableB.Col2 = ? 可在 Seek 過程中一併篩選,無額外 Filter。
TableB.Col2 = ?(因 Index Seek 未觸及該欄位)TableA 同理:Table Scan 可直接篩選 Col2,無額外 Filter。
TableA INNER LOOP JOIN TableB
-- 或
OPTION (LOOP JOIN)
警告:超出適用範圍強制使用反而嚴重劣化效能,除非極有把握否則勿用。