mysql - on 条件 vs where 条件

Posted

技术标签:

【中文标题】mysql - on 条件 vs where 条件【英文标题】:mysql - conditions in on vs conditions in where 【发布时间】:2013-05-23 09:46:11 【问题描述】:

我找不到明确的答案,而且我的测试没有定论:

如果我在连接中的表中有一个列必须等于(或与)一个常量(或与之有其他关系),那么将条件置于 ON 是否更快?还是最后在 WHERE?

例子:

    SELECT * FROM `" . BLABLA . "` as `s`
    JOIN `" . BLABLABLA . "` AS `sDet` ON (`sDet`.`a` > '" . $R['a'] . "'
        AND '" . $R['b'] . "' BETWEEN `sDet`.`c` AND `sDet`.`d`
        AND `s`.`id` = `sDet`.`idDet`
    )
    WHERE `s`.`f` = 'whatever'

或者

    SELECT * FROM `" . BLABLA . "` as `s`
    JOIN `" . BLABLABLA . "` AS `sDet` ON (`s`.`id` = `sDet`.`idDet`)
    WHERE `s`.`f` = 'whatever'
        AND '" . $R['b'] . "' BETWEEN `sDet`.`c` AND `sDet`.`d`
        AND `s`.`id` = `sDet`.`idDet`

我在想第一个版本应该更快,但我不确定。有什么想法吗?

【问题讨论】:

【参考方案1】:

我不太确定哪个更快,但请记住,条件在 where 和 on 子句之间并不总是可以互换的。

内连接 在 INNER JOIN 的情况下,它们是可互换的

外部联接 在 OUTER JOIN 的情况下,它们不一定可以互换。这取决于条件取决于联接的哪一侧

【讨论】:

这是正确的......但在我的情况下没有问题:)。我需要做的是优化那个查询(嗯......不是那个,而是一个类似的,有 9 个连接)。

以上是关于mysql - on 条件 vs where 条件的主要内容,如果未能解决你的问题,请参考以下文章

mysql on和where区别

mysql中on,in,as,where如何用,意思是啥?

mysql关联left join条件on和where条件的区别及结合coalesce函数

最全解释Mysql 的join中on与where 过滤条件差异

MySQL 中 on与where筛选条件的区别

MYSQL 表左连接 ON AND 和ON WHERE 的区别