在连接查询中,比较顺序是否重要?

时间:2015-08-31 07:13:56

标签: mysql sql sql-server sqlite

我通常按如下方式编写连接查询:

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'

不同

这个问题纯粹出于好奇,我想知道如何对待它,以便我能更好地理解它。

3 个答案:

答案 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子句,那么它将按照分组中提到的字段使用排序。