4

id(主キー) とhash(インデックス)を持つ単純な mysql テーブルを持つ。他のいくつかの列 (varchar / int) がありますが、それらに対するクエリは必要ありません。

テーブルの合計サイズは、2.5M 行で約 350MB です。

SELECT COUNT(*) FROM table LIMIT 1;

約0.5~1秒かかっています。私のinnodbバッファは1GBに設定されています。次のようなバリエーション(改善なし)も試しました。

SELECT COUNT(id) FROM table LIMIT 1;

SELECT COUNT(*) FROM table WHERE id > 0 LIMIT 1;

独身者

SELECT * FROM table WHERE id = 'x' LIMIT 1;

1 ミリ秒以内に返されます (localhost mysql)。スロー カウント (0.5 ~ 1 秒) を改善するためのヒントをいただければ幸いです。

4

2 に答える 2

1

ここで簡単な説明を見つけることができます。つまり、innodb は、すべての行をカウントするために (インデックスを利用する where 句なしで) 全テーブル スキャンを実行する必要があります。この回答も参照してください。

LIMIT 1ところで、クエリで使用する意味がわかりません。group by句がないため、常に 1 つのレコードが返されます。

于 2013-11-06T17:36:33.323 に答える