読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

InnoDBでコミット前のデータのカウント結果を取得する

mysql

MyISAMの場合はカウントの数値はファイル保存されている為一瞬でカウント結果が返る。
しかしInnoDBはそうもいかない。
InnoDBテーブルで、大量データ投入時にどの位insertされたか知りたい時がある(かもしれない)。
その場合、トランザクション分離レベルを変更してダーティーリードさせてカウントする。
こんな感じ。

$ mysql -uroot test -e "set transaction isolation level read uncommitted;select count(*) from t_test;"
 +----------+
 | count(*) |
 +----------+
 |   317222 |
 +----------+

ちなみにset構文のデフォルトはsessionなので、このコマンド内でのみ、ダーティーリードすることができる。
http://dev.mysql.com/doc/refman/4.1/ja/set-option.html