0

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

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

例子:

    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`

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

4

1 回答 1

0

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

内部
联接 如果是内部联接,它们是可互换的

外连接
如果是外连接,它们不一定可以互换。这取决于条件取决于联接的哪一侧

于 2013-05-23T10:05:25.117 回答