【发布时间】:2014-09-25 02:09:14
【问题描述】:
例如:
SELECT *
FROM a
JOIN b ON a.b_id = b.id
AND b.col = 'something'
对
SELECT *
FROM a
JOIN b ON a.b_id = b.id
WHERE b.col = 'something'
我假设 MySQL 的查询优化器会认为这是同一个查询。无论 WHERE 列是在表 a 还是表 b 上,它们在所有这些情况下都相同吗?
【问题讨论】:
-
作为一个好的经验法则,你应该在 JOIN 上加入事物并在 WHERE 上过滤事物。这样你可以更轻松地阅读它,并且以后可以更轻松地重构它
-
@JohnRuddell 但是它们的执行方式是否相同,从而使性能相同?
-
是的,据我所知执行是相同的。我刚刚看到很多查询使用该逻辑或相反的逻辑。连接表并使用完成连接的位置。它还不错,但通常更难阅读。所有优秀的程序员都应该养成以某种方式做事的习惯。如果你想这样做,就试着一直保持这种方式。一致性是关键。我建议使用 where 来表示它的含义,而 join 来表示它的含义,但这是我个人的偏好
标签: mysql join optimization query-optimization