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

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

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

必要な時があるかもしれません。


f:id:treeapps:20180418131549p:plain

MyISAMの場合はカウントの数値はファイル保存されている為一瞬でカウント結果が返ります。

しかしInnoDBはそうもいきません。

InnoDBテーブルで、大量データ投入時にどの位insertされたか知りたい時ってありませんか?

その場合、トランザクション分離レベルを一時的(セッション)に変更してダーティーリードさせてカウントすると、リアルタイムなカウント数を取得できます。

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

ちなみにset構文のデフォルトはsessionなので、このコマンド内でのみダーティーリードすることができるのです。