我只是在试着理解这背后的机制。有两个查询
SELECT SQL_NO_CACHE count( id ) AS cnt FROM `users` GROUP BY country
SELECT SQL_NO_CACHE id FROM `users` GROUP BY countryid是主要的,国家/地区未编制索引。为什么查询with count的运行时间要长得多。根据我的理解,为了对表的内容进行分组,您无论如何都需要遍历所有行?如果是这样的话,为什么它不算数,因为它是按分组的?或者,如果不是这样,它如何在不遍历所有行的情况下进行分组,如何跳过其中的一些行?
发布于 2012-02-20 03:08:17
您的查询中没有计数-您确定这就是问题所在吗?AS cnt所要做的就是重命名该特定的列。我几乎100%确定这是因为您首先运行了这里列出的第一个查询,因此当您运行第二个查询时,MySQL可以从内存中提供结果,而不必访问磁盘。毕竟,查询是相同的-您所更改的只是结果中id列的名称。
发布于 2012-02-20 03:09:17
你的查询不涉及任何计数,如果你想计数,你应该使用
SELECT SQL_NO_CACHE COUNT(id) FROM `users` GROUP BY country第一个问题在逻辑上需要更多的时间来运行,因为它实际上是在创建一个新表。(因为cnt是这样做的)
https://stackoverflow.com/questions/9352234
复制相似问题