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中文网其他相关文章!