LEFT JOIN 与 INNER JOIN:性能悖论
人们普遍认为 SQL Server 中 INNER JOIN
操作比 LEFT JOIN
更高效。 然而,性能可能令人惊讶地违反直觉。本文探讨了 LEFT JOIN
显着优于 INNER JOIN
的场景。
案例研究:
最初使用 INNER JOIN
涉及九个表的复杂查询表现出较差的性能。 切换到 LEFT JOIN
显着提高了执行速度。
为什么速度会意外提升?
传统观点是正确的:LEFT JOIN
通常不会更快。它涉及相同的 INNER JOIN
处理,加上为左表中不匹配的行添加空值的额外步骤。 较大的结果集也会减慢速度。
理解观察到的性能差异的关键在于所涉及的表上缺少主键和外键索引。缺乏索引严重影响了 INNER JOIN
的效率。
LEFT JOIN 可能获胜的情况:
虽然不是常态,但在特定条件下 LEFT JOIN
可能优于 INNER JOIN
:
微小表: 对于非常小的表(十行以下),基于哈希的 INNER JOIN
操作的开销可能超过 LEFT JOIN
执行计划中通常使用的嵌套循环的开销。
索引不足:如果 INNER JOIN
索引缺失或不充分,SQL Server 可能会选择效率较低的执行计划。 LEFT JOIN
利用嵌套循环可能会提供更好的性能。
总结:
虽然 LEFT JOIN
本质上比 INNER JOIN
需要更多的处理,但涉及小表或缺乏适当索引的情况可能会导致 LEFT JOIN
出现意想不到的性能优势。 缺乏适当的指标可能是上述案例研究的罪魁祸首。
以上是什么时候 LEFT JOIN 的性能优于 INNER JOIN?的详细内容。更多信息请关注PHP中文网其他相关文章!