【发布时间】:2013-09-18 17:37:51
【问题描述】:
我正在尝试确定在 MySQL 查询中的 JOIN ON 子句或 WHERE 子句本身中使用选择参数是否有任何已知的好处。
我确信并知道返回的结果是相同的,在本地测试时,“查询时间”似乎几乎可以忽略不计,但想看看是否有任何专家意见。
这两者在后端有区别吗?如果有,首选哪个?
v1
SELECT
*
FROM users a
JOIN user_photos b ON (b.userid = a.userid)
WHERE
a.userid = 12345
AND b.photo_type = 1
或 v2
SELECT
*
FROM users a
JOIN user_photos b ON (b.userid = a.userid AND b.photo_type = 1)
WHERE
a.userid = 12345
【问题讨论】:
-
使用
EXPLAIN,看看执行计划是否不同。 -
我认为 INNER JOIN 没有区别。会有一个 LEFT JOIN。
-
我倾向于只在
JOIN子句中使用字段到字段的条件,其他任何内容,或者当涉及常量时,倾向于进入 WHERE 子句。使用常规的INNER连接,它们可能在功能上是相同的。 -
@Barmar - 解释执行计划是相同的 - 基于结果,我确实认为它们是相同的,但想知道是否有任何后端内容根据查询的布局方式发生变化
-
如果执行计划相同,则执行相同的工作。
标签: mysql sql performance