gpt4 book ai didi

MySQL分组查询复杂度分析

转载 作者:行者123 更新时间:2023-11-30 23:31:41 25 4
gpt4 key购买 nike

MySQL中“group by”语句的复杂度是多少?

我正在管理各种大表,我也想知道是否有任何方法可以计算查询将花费多少时间。

最佳答案

这个问题不可能通过了解整个查询的样子来回答。一些 group by 可能非常昂贵,而另一些则非常便宜,这完全取决于数据库中索引的设置方式,您分组的值是否可以缓存等。

例如,这是一个非常便宜的组:

CREATE TABLE t (a INT, KEY(a));
SELECT * FROM WHERE 1 GROUP BY a;

因为 a 是一个索引。

但是对于这样的事情,它非常昂贵,因为它需要进行表扫描。

CREATE TABLE t (a INT);
SELECT * FROM WHERE 1 GROUP BY a;

一般如果某个键不可用,数据库会在内存中为group by子句创建一个临时表,遍历所有的值,将每个值插入到临时表中,并带有索引到结果集中相应的行,然后它将从临时表中选择,从每一列中选择第一行并将其作为结果发回。取决于您是否在每个 group by 子句中使用“额外”行(即使用 MAX()、GROUP_CONCAT() 或类似方法),它将需要再次获取所有行。

您可以使用 EXPLAIN 来确定 MySQL 将使用什么策略,如果可以使用索引,则为“额外”(按执行成本升序排列)“使用索引”,如果从磁盘读取所有行,则为“使用文件排序”将是必要的,如果需要临时的,列将包含“使用临时的”

关于MySQL分组查询复杂度分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10259791/

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