count(*)がやたら重いけどどうにかしたい件

select count(*) from hoge
ってやると重い。
show table statusとかやると行数の概算が取れるけどそれはいやだ、どうしてももっと正確な数が欲しい、って時。
myisamなら行数はさくっともらえるけどinnodbは重い。
こういうときはインデックスを強制的に利用してもらう。これではええええぜええええ。
select count(*) from hoge
use index(hoge_index);
インデックスはなんでもいいけど、ひとつのカラムだけインデックスが指定されているようなやつがいいかな。あとはバラけ具合もバラけてるインデックスほど良いだろう。そして長さは短いインデックスが良いだろう。この三つの順で優先度を決めて選べばいいだろう。
うちの場合はPRIMARYっていう標準のインデックスがあったんだけど、それだとなぜか遅かった。どうしてかな。innodbの主キーの取り扱いについてもうちょっと調べてみる必要性あり。
最終的に選んだインデックスはtimestamp型のカラム更新時にその時刻を記録してくれるカラムに対して張ってあったインデックス。早かった。
以上。

この投稿へのコメント

コメントはありません。

コメントを残す

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL