メモ:MySQLのLAST_INSERT_IDが遅くなる
今日構築してテスト稼動したサーバで、uptimeが3とかになるため調査したら、MySQLが重い。
slow-queryをチェックすると
select LAST_INSERT_ID() from table;
というqueryに時間がかかってる模様。
ぐぐると、上のqueryは単に以下でいいらしい。
select LAST_INSERT_ID();
要は、LAST_INSERT_ID()は文字通り最後にinsertしたIDを返すので、テーブル指定はいらないということ。むしろ、テーブルを指定するとレコードを全部舐めるので重くなる、ということのようだ。
コネクションごとにLAST_INSERT_ID()は保存されるので、(つまり、あるコネクションでinsertしてから別のコネクションでinsertされたとしてもLAST_INSERT_IDは、ちゃんと欲しいIDを返してくる)この指定でかまわないということだ。
今回テストでレコードを多めに設定したため、この現象が発生したらしい。
ちなみにアプリを修正したら、めでたくuptimeが0.5を切るようになったとさ。