2012-02-19 37 views
0

我只是想了解背後的機制。有兩個查詢爲什麼MySQL COUNT + GROUP-BY花費的時間比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是主要的,國家沒有索引。 爲什麼使用count的查詢需要更長的時間才能運行。從我的理解到GROUP BY的表格內容,你無論如何都需要遍歷所有的行?如果是這樣,那麼爲什麼它不會因爲它將事物分組?或者如果不是這樣,那麼它如何不經過所有的行就能成功地完成組合,它是如何設法跳過其中一些行的?

+1

我真的很抱歉,我在創建問題時複製了錯誤的查詢。這已得到糾正。 – Eugene 2012-02-19 19:18:46

回答

0

在你的查詢中沒有COUNT - 你確定這是問題嗎?所有AS cnt都重命名該特定列。我幾乎100%肯定這是因爲您首先運行了您在此列出的第一個查詢,因此當您運行第二個查詢時,MySQL可以從內存中提供結果,而不必訪問磁盤。畢竟,查詢是一樣的 - 您要更改的是結果中的id列的名稱。

0

您的查詢不涉及任何計數,如果要算你應該使用

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

第一個在邏輯上花更多的時間來運行,因爲它實際上是創建一個新表。 (AS cnt是這樣)