gpt4 book ai didi

mysql - HAVING vs (subquery) WHERE的SQL引擎执行计划

转载 作者:行者123 更新时间:2023-11-29 07:22:28 26 4
gpt4 key购买 nike

执行时,下面两个sql查询是否有区别:

SELECT name, count(*) FROM mytable GROUP BY name HAVING count(*) > 1

和:

SELECT * from (SELECT name, count(*) cnt FROM mytable GROUP BY name) x where cnt > 1

换句话说,是否有更多的“便利”子句来简化必须进行子选择,或者当使用 having 语句与第二种方法时,查询引擎的性能是否根本不同?目前在 mysql 中:

enter image description here

创建表:

CREATE TABLE `mytable` (
`name` varchar(20) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf-8;

最佳答案

在几乎任何其他数据库中,两者都是等价的。为简洁起见,HAVING 通常是更好的选择。

至少在历史上,MySQL 实现了子查询。所以,这个查询:

SELECT * 
FROM (SELECT name, count(*) as cnt
FROM mytable
GROUP BY name
) x
WHERE cnt > 1;

表示要写出派生表,然后重新扫描,寻找最终的WHERE。但是,这对性能影响不大,因为 GROUP BY 已经在读取和写入数据。

因此,这些查询在 MySQL 上的性能可能非常相似。而且,他们几乎在任何其他数据库上都有相同的执行计划。 HAVING 子句导致更简单的查询。

关于mysql - HAVING vs (subquery) WHERE的SQL引擎执行计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55526398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com