我通常按如下方式编写连接查询:
Select 'field' from 'table' join 'references' on 'table'.'id' = 'references'.'reference'
现在我突然想知道,你on 'table'.'id' = 'references'.'reference'
的执行顺序是否对执行速度有影响?
我主要使用sqlserver,mysql和sqlite,我可以想象如果存在差异,可能会有三种不同的实现。
所以基本上归结为:
on 'table'.'id' = 'references'.'reference'
与on 'references'.'reference' = 'table'.'id'
这个问题纯粹出于好奇,我想知道如何对待它,以便我能更好地理解它。
答案 0 :(得分:1)
该顺序没有区别。
加入条件ON (..here..)
只是一个逻辑表达式,没有别的。
答案 1 :(得分:1)
如果编写SQL语句
,执行没有区别Select 'field'
from 'table'
join 'references'
on 'table'.'id' = 'references'.'reference'
或
Select 'field'
from 'table'
join 'references'
on 'references'.'reference' = 'table'.'id'
您也可以将其编写为交叉连接(仅适用于内部连接)
Select 'field'
from 'table'
cross join 'references'
where 'table'.'id' = 'references'.'reference'
我会使用第三个例子进行内连接。但它解释了如果你考虑逻辑表达式,它对于等式连接没有任何区别。
当然,如果您在on-cluase x > y
中进行了以下比较,那么您必须将运算符更改为y < x
答案 2 :(得分:0)
'table'.'id' = 'references'.'reference'
与'references'.'reference' = 'table'.'id'
相同但是关于排序,您应该始终使用order by子句来保证安全。
根据我的经验,我可以说mysql它使用基于时间戳的默认排序意味着如果你不在查询中指定顺序,那么它将首先显示首先创建的行等等...... / p>
注意:如果您正在使用group by子句,那么它将按照分组中提到的字段使用排序。