我是一个 MySQL 查询新手,所以我确信这是一个有明显答案的问题。
但是,我正在查看这两个查询。他们会返回不同的结果集吗?我知道排序过程会以不同的方式开始,但我相信它们会返回相同的结果,而第一个查询的效率稍高一些?
查询 1:HAVING,然后 AND
SELECT user_id
FROM forum_posts
GROUP BY user_id
HAVING COUNT(id) >= 100
AND user_id NOT IN (SELECT user_id FROM banned_users)
查询 2:WHERE,然后 HAVING
SELECT user_id
FROM forum_posts
WHERE user_id NOT IN(SELECT user_id FROM banned_users)
GROUP BY user_id
HAVING COUNT(id) >= 100
实际上第一个查询的效率会较低(HAVING
之后应用WHERE
).
UPDATE
一些伪代码来说明如何执行查询([非常]简化的版本)。
第一个查询:
1. SELECT user_id FROM forum_posts
2. SELECT user_id FROM banned_user
3.分组、计数等。
4. 如果记录出现在第二个结果集中,则从第一个结果集中排除记录
第二次查询
1. SELECT user_id FROM forum_posts
2. SELECT user_id FROM banned_user
3. 如果记录出现在第二个结果集中,则从第一个结果集中排除记录
4.分组、计数等。
步骤1,2的顺序并不重要,mysql可以选择它认为更好的任何内容。重要的区别在于步骤 3,4。已应用后GROUP BY
。分组通常比联接更昂贵(在这种情况下排除记录可以被视为联接操作),因此分组的记录越少,性能越好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)