连接中的条件顺序是否会影响查询性能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接中的条件顺序是否会影响查询性能?相关的知识,希望对你有一定的参考价值。

我正在写一些SQL,一个问题出现在我的脑海里。

SQL是这样的:

select
    t1.column1,
    t2.column2
from
    table1 t1
    inner join table2 t2
    on  t1.keyA = t2.keyA
where
    t1.name = 'kim kardashian'

on条款中的顺序是否会影响SQL的表现?

on t1.keyA = t2.keyAon t2.keyA = t1.keyA没有区别?

无论顺序如何,SQL的结果都是相同的。

答案

on条款中的条件顺序不应影响性能。为什么不?在高级别上是SQL执行的三个步骤:

  1. 解析查询
  2. 构造并优化“可执行”代码
  3. 执行代码

第二级优化查询,并应考虑执行查询的不同方法。连接条件是此优化的一部分 - 一次完成。

从理论上讲,joins的顺序无关紧要,尽管在一个非常复杂的查询中,它可能很重要。

另一答案

在内部联接的情况下,仅保留在联接的两侧匹配的记录。这样做的逻辑结果是连接顺序不会影响结果集。因此,对于大多数数据库,优化程序将选择具有最佳性能的连接顺序。对于您的直接问题,如果您检查查询计划,您可以在连接的左侧看到table1table2

另一答案

不,它没有。查询优化器无论如何都会转换您的代码。你最好选择一个约定并使用它。我更喜欢先写入连接表的ID,因为它对读者来说更具流动性。

以上是关于连接中的条件顺序是否会影响查询性能?的主要内容,如果未能解决你的问题,请参考以下文章

我们给出 where 条件的顺序会影响性能吗? [复制]

SQL where 条件顺序对性能的影响有哪些

Oracle SQL - FROM 子句中的 JOIN 顺序会影响性能优化吗?

SQL Server 2005 - 内部联接的顺序

Lucene查询中的顺序是否会影响结果?

INNER JOIN 条件中的列顺序严重影响性能