MySQL分组查询复杂性分析

MySQL分组查询复杂性分析,mysql,complexity-theory,Mysql,Complexity Theory,MySQL中GROUPBY语句的复杂性是什么 我正在管理很多大的表,我也想知道是否有任何方法可以计算一个查询将花费多少时间。如果知道整个查询是什么样子,这个问题是不可能回答的。有些group by可能非常昂贵,而另一些非常便宜,这完全取决于数据库中的索引是如何设置的,分组依据的值是否可以缓存等等 例如,这是一个非常便宜的组: CREATE TABLE t (a INT, KEY(a)); SELECT * FROM WHERE 1 GROUP BY a; 因为a是一个索引 但是对于这样的东西,

MySQL中GROUPBY语句的复杂性是什么


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

如果知道整个查询是什么样子,这个问题是不可能回答的。有些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将使用什么策略,如果可以使用索引,则按成本升序执行“使用索引”,如果需要从磁盘读取所有行,则使用“使用文件排序”,如果需要临时数据库,则列将包含“使用临时数据库”

SQL的设计使您的dbms能够尽可能地优化。无论如何,在我看来,做一些分析是你最好的选择。