RubyのORMのActiveRecordにfind_or_create_byというメソッドがある。このメソッドはデータがあったらselectした結果が返ってきて、ない場合はinsertをしてその結果を返してくれるという夢のような機能を実現してくれているらしい。 このデータがあったらselect、ない場合はinsertのような処理は扱うときによく考えないとロック周りでDBが詰まってつらい思いすることがある。そこでこのメソッドはどんなクエリを投げるのか検証してみた。 検証方法 ActiveRecord::Baseを系統したGamePlayCountモデルに対してrails cで操作を行う。 GamePlayCountは対象のgame_idを遊ぶとcountを++していくテーブルだと仮定する。 テーブル構造はこんな感じ。 CREATE TABLE `game_play_counts` ( `i