4

message_message3000000レコードのテーブルがあります。

count(*)クエリを実行すると、非常に遅くなります...:

mysql> select count(*) from message_message;

+ ---------- +

| count(*)|

+ ---------- +

| 2819416 |

+ ---------- +

セットの1行(2分35.35秒)

説明する:mysql> explain select count(*) from message_message;

| id | select_type | テーブル| タイプ| possible_keys | キー| key_len | ref | 行|追加|

| 1 | シンプル| message_message | インデックス| NULL | プライマリー| 4 | NULL | 2939870 | インデックスの使用|

セット内の1行(0.02秒)

何が起きましたか?

4

2 に答える 2

5

InnoDBのこの投稿を見ると、全表スキャンを実行する必要があります。MyISAMの場合と同様に、インデックスが読み取られます。

インデックスを使用するように実行パターンを変更するにもかかわらず句を使用するwhereと、一般に、InnoDBは完全な無制限のカウントでMyISAMよりも遅くなりますが、パフォーマンスは制限されたカウントで一致します。

于 2012-07-16T13:49:55.287 に答える
0

レコードの量をカウントする場合は、テーブル全体をクエリして、結果セットのnum_rowsプロパティを使用することをお勧めします。Count(...)通常、(と組み合わせて)集計クエリが必要な場合に使用されますGROUP BY

于 2012-07-16T13:51:56.997 に答える