我找不到一个明确的答案,因为我的测试是不确定的:
如果我在连接的表中有一列必须等于常量(或与常量有其他关系),那么将条件放在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`我认为第一个版本应该更快,但我不确定。有什么想法吗?
发布于 2013-05-23 18:05:25
我不太确定哪个更快,但请记住,where和on子句之间的条件并不总是可以互换的。
内部联接
对于内连接,它们是可互换的
外部联接
在外部连接的情况下,它们不一定可以互换。这取决于连接条件的哪一方
https://stackoverflow.com/questions/16710602
复制相似问题