为什么MySQL计数为+;分组比分组需要更长的时间

为什么MySQL计数为+;分组比分组需要更长的时间,mysql,count,group-by,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是主id,国家/地区未编制索引。 为什么带有count的查询运行时间要长得多。根据我的理解,为了按表的内容分组,您需要遍历所有行吗?如果是这样的话,为什么它在分组时不算数呢?或者,如果不是这样,它如何在不遍历所有

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

SELECT SQL_NO_CACHE count( id ) AS cnt FROM `users` GROUP BY country
SELECT SQL_NO_CACHE id FROM `users` GROUP BY country
id是主id,国家/地区未编制索引。
为什么带有count的查询运行时间要长得多。根据我的理解,为了按表的内容分组,您需要遍历所有行吗?如果是这样的话,为什么它在分组时不算数呢?或者,如果不是这样,它如何在不遍历所有行的情况下进行分组,如何跳过其中的一些行

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

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

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

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

非常抱歉,我在创建问题时复制了一个错误的查询。这一点已经得到纠正。