为什么MySQL COUNT + GROUP-BY花费的时间比GROUP-BY长

时间:2012-02-19 19:05:17

标签: mysql count group-by

我只是想了解这背后的机制。有两个查询

SELECT SQL_NO_CACHE count( id ) AS cnt FROM `users` GROUP BY country
SELECT SQL_NO_CACHE id FROM `users` GROUP BY country

id为primary,country未编入索引。 为什么带有计数的查询需要更长的时间才能运行。从我的理解为了表的GROUP-BY内容,你还需要遍历所有的行吗?如果是这样的话,为什么它不算数呢?或者如果不是这样,它如何设置分组而不经过所有行,它如何设法跳过其中的一些?

2 个答案:

答案 0 :(得分:0)

您的查询中没有COUNT - 您确定这是问题吗?所有AS cnt都会重命名该特定列。我几乎100%肯定这是因为你首先运行了你在这里列出的第一个查询,因此当你运行第二个查询时,MySQL可以从内存中提供结果,而不是必须访问磁盘。毕竟,查询是相同的 - 所有您要更改的是结果中id列的名称。

答案 1 :(得分:0)

您的查询不涉及任何计数,如果您想要计算,则应使用

SELECT SQL_NO_CACHE COUNT(id) FROM `users` GROUP BY country

第一个逻辑上需要更多时间来运行,因为它实际上是在创建一个新表。 (AS cnt那样做)