【发布时间】:2012-03-30 03:51:34
【问题描述】:
我一直认为 Inner Join 的性能比 Outer JOIN 好,但我现在经历了几个情况,这根本不是真的......
前几天我正在创建一个包含一系列 INNER JOINS 的查询。内连接适用于所有这些连接,因为我只希望所有连接表中的行都匹配。
我注意到性能非常糟糕(运行查询需要 1 分钟)。奇怪的是,当我将其中一些切换到外部连接时,查询在几秒钟内完成...... 这不是预热或缓存的情况,因为我在两次运行之间重新启动了 SQL 服务器,并且性能读数随着时间的推移保持一致。
我在两个不同的报告中遇到了同样的情况,但共同的主题是通过切换到 LEFT JOIN 来提高性能。我为两个报告切换了相同的表格。所有 JOINS 都在 GUID 列上完成
Left JOIN 给出了相同的行数,因为所有 id 在 JOINED 表中都匹配,所以可以切换,但我很好奇是否有人有解释。 对此有何建议?
平台是 SQL Server 2008,所有外部联接都是左联接
【问题讨论】:
-
这不是 SQL 问题,而是供应商特定的问题。您应该指明您使用的是哪个 DBMS(包括作为标签)。
-
不,这是一个与关系代数有关的 SQL 问题。供应商细节可能会影响性能,但很可能是 OP 的查询在使用 OUTER JOIN 时表现更好的根本原因。
-
@TGH:您需要指定实际查询以及由 INNER 和 OUTER JOIN 生成的执行计划,才能很好地解释发生了什么。
-
好的。不幸的是,我不再拥有它了。我只是想知道这些事情是否有任何一般指导方针。我应该使用 LEft JOIN 对我来说没有任何意义,因为表是为 INNER JOIN 适当建模的
-
如果没有查询,我最好的猜测是 OUTER JOIN 能够在执行 JOIN 之前过滤查询的左侧,而 INNER JOIN 将过滤推迟到之后。真的需要查看查询以获得更好的猜测。执行计划将揭示所有(嗯,很多......)
标签: sql sql-server-2008