我正在写一些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.keyA
和on t2.keyA = t1.keyA
没有区别?
无论订单如何,SQL
的结果都相同。
答案 0 :(得分:2)
on
子句中的条件顺序不应影响性能。为什么不?在高级别上是SQL执行的三个步骤:
第二级优化查询,并应考虑执行查询的不同方法。连接条件是此优化的一部分 - 一次完成。
理论上,join
s的顺序无关紧要,尽管在一个非常复杂的查询中,它可能很重要。
答案 1 :(得分:1)
在内部联接的情况下,仅保留在联接两侧匹配的记录。这样做的逻辑结果是连接顺序不会影响结果集。因此,对于大多数数据库,优化程序将选择具有最佳性能的连接顺序。对于直接问题,如果您检查查询计划,则可以在联接的左侧看到table1
或table2
。
答案 2 :(得分:1)
不,它没有。查询优化器无论如何都会转换您的代码。你最好选择一个约定并使用它。我更喜欢先写入连接表的ID,因为它对读者来说更流畅。