SQL Server 連線效能:揭穿 LEFT JOIN 迷思
關於 SQL Server 連線效能有一個常見的誤解:LEFT JOIN
操作本質上比 INNER JOIN
操作更快。 這通常是不準確的。 LEFT JOIN
引入了額外的處理開銷,因為它們必須執行 INNER JOIN
的所有工作,然後為右表中不匹配的條目添加具有 NULL
值的行。 較大的結果集也有助於增加執行時間。
為什麼你的LEFT JOIN
可能更快
如果您觀察到更快的 LEFT JOIN
查詢,原因可能源自於與連接類型本身無關的因素:
LEFT JOIN
的開銷可能可以忽略不計。 當LEFT JOIN
可能表現出優勢時
LEFT JOIN
可能優於 INNER JOIN
的唯一情況是在非常特定的條件下:
LEFT JOIN
開銷沒有索引相關的效能問題那麼重要。 說明性範例
考慮這些表格:
<code class="language-sql">CREATE TABLE #Test1 (ID int PRIMARY KEY, Name varchar(50) NOT NULL); CREATE TABLE #Test2 (ID int PRIMARY KEY, Name varchar(50) NOT NULL); INSERT INTO #Test1 VALUES (1, 'One'), (2, 'Two'), (3, 'Three'); INSERT INTO #Test2 VALUES (1, 'One'), (2, 'Two'), (3, 'Three');</code>
INNER JOIN
查詢:
<code class="language-sql">SELECT * FROM #Test1 t1 INNER JOIN #Test2 t2 ON t2.Name = t1.Name;</code>
一個LEFT JOIN
查詢:
<code class="language-sql">SELECT * FROM #Test1 t1 LEFT JOIN #Test2 t2 ON t2.Name = t1.Name;</code>
在這個最小的範例中,行數很少且沒有索引,LEFT JOIN
可能會顯示得更快。但是,如果連接條件使用 ID
列(主鍵),則由於有效的索引利用率,INNER JOIN
的速度會快得多。 這凸顯了無論連接類型為何,正確的索引在優化連接效能方面的重要性。
以上是為什麼我的 LEFT JOIN 有時比 SQL Server 中的 INNER JOIN 更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!