【发布时间】:2012-09-15 12:20:26
【问题描述】:
以下是伪查询,所以我不关心结果,但是以下 MySQL 查询之间是否存在任何差异(在性能、结果数量等方面)?
查询 1
SELECT u.`username`, COUNT(*) AS 'posts', u.`age`
FROM `users` u
INNER JOIN `posts` p
ON p.`user_id`=u.`id`
GROUP BY u.`id`
HAVING u.`age` > 12
假设此查询中的列smth 只是为了HAVING 条件而选择的,因此结果中不需要它的值。
查询 2
SELECT u.`username`, COUNT(*) AS 'posts'
FROM `users` u
INNER JOIN `posts` p
ON p.`user_id`=u.`id` AND u.`age` > 12
GROUP BY u.`id`
【问题讨论】:
-
这很难说(也许是无关紧要的),因为您的查询并没有真正的意义。您返回的列在 GROUP BY 查询中既不聚合也不分组。
-
为什么不在
WHERE子句中设置u.`smth`的条件? -
@GiantofaLannister 聚合将使其成为不可能。
-
在查询上运行
explain看看 mysql 说了什么。 -
@KeithRandall 没有任何区别。