【问题标题】:Outer join performance外连接性能
【发布时间】:2011-03-28 23:13:18
【问题描述】:

为什么外连接通常比内连接慢?我的意思是,独立于数据库供应商。我想这是实施或使用的访问计划的问题,但我无法说服我的一位认为性能应该相同的同事。

提前致谢 刘易斯

【问题讨论】:

    标签: sql performance


    【解决方案1】:

    外部联接通常会给你更多的结果(A*B 而不是WHERE A=B)。这需要更多时间。

    【讨论】:

    • 外连接通常不会给你 A 乘以 B 作为结果的数量,因为它不是联合。结果,它将为您提供 A 或 B 中的记录数,具体取决于两者中的主要选择。外连接只意味着当连接表中没有对应的记录时,您想要主选定表上的所有记录和连接表列中的空值。 A*B 只有在您可以进行“完全”外连接时才会发生:左外连接和右外连接相结合。
    • @Marjan,如果是FULL OUTER JOIN,该怎么办?
    • @Abe:我刚刚意识到并编辑了我的评论......(无法删除它们......)
    • 不挑毛病,但 A*B(叉积)通常只是 CROSS JOIN 的输出。如果您的加入条件是1 = 1,它将成为一个叉积,但INNER JOIN 也是如此。
    【解决方案2】:

    一般来说,这是因为数据库引擎必须执行更多的比较操作来缩小结果集。

    【讨论】:

      【解决方案3】:

      inner join 将消除行,而 outer join 则不会。这会导致需要处理更多的行。

      看看this article,它直观地描述了连接。请注意inner join 与左侧和完整outer join 相比,结果集小了多少。这些图片并不代表所有场景,但它们可以让您了解正在发生的事情。

      【讨论】:

        【解决方案4】:

        使用真实数据进行测试。 可能除非外连接引入额外的行,否则性能是相同的。

        【讨论】:

          【解决方案5】:

          我的网站出现性能问题,发现查询需要 7 秒才能完成。

          此查询中的所有列都是数字并已编入索引(SQL Server 2008 R2)。

          这个完全外连接包括 3 个表,每个表有 150、350 和 27 万条记录。

          我只是将 FULL OUTER JOIN 替换为 LEFT JOIN,执行时间减少到 0 秒(毫秒)。

          在实现完全外连接之前,我只用几条记录对其进行了测试。但是,我了解到,如果表有数千或数百万条记录,则完全外连接的性能不会很好。

          【讨论】:

            【解决方案6】:

            有时,左连接比内连接执行得更快。这将取决于应该加入的 2 个结果集

            【讨论】:

              猜你喜欢
              • 2015-04-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-12
              相关资源
              最近更新 更多