2012-02-19 18 views
0

私はちょうどこの背後にある仕組みを理解しようとしています。 2つのクエリがあります。なぜ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はプライマリで、国はインデックスに登録されていません。 カウントを伴うクエリの実行に時間がかかります。テーブルのGROUP BYの内容に私の理解から、あなたはとにかくすべての行を歩く必要がありますか?もしそうなら、それはグループ化されたものとしてカウントされないのはなぜですか?そうでない場合、どのようにすべての行を通過することなくグループ化することができますか?その一部をスキップする方法はありますか?

+1

私は本当に申し訳ありませんが、私は質問を作成するときに間違ったクエリをコピーしました。それは修正されました。 – Eugene

答えて

0

あなたの質問にはCOUNTはありません。これが問題なのですか?すべてAS cntはその特定の列の名前を変更します。私はほぼ100%確信しています。なぜなら、ここで最初に挙げたクエリを実行したため、2番目のクエリを実行したときに、MySQLはディスクを使用するのではなくメモリから結果を提供できるからです。結局のところ、クエリは同じで、変更するのは結果内のid列の名前だけです。

0

あなたのクエリが任意のカウントを必要としない、それは事実上、新しいテーブルを作成しているので、あなたがカウントしたい場合は、

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

を使用する必要があります最初のものは、論理的には、実行するために多くの時間を取っています。

関連する問題