Ruby on Railsをモデルでidごとのcountを取るような場合に発生しがちなN+1 countクエリを高速化するRubyGems『activerecord-precount』を紹介します。
🗻 概要
次のようなN+1カウントのクエリが発生する場合:
Tweet.all.each do |tweet| |
precount
メソッドを使うことで、2つのSQLでid単位のcountを取れます。
Tweet.all.precount(:favorites).each do |tweet| |
Joinも合わせて行いたい場合はeager_count
メソッドを使うことで、1つのSQLでcountをとれます。
Tweet.all.eager_count(:favorites).each do |tweet| |
🎳 インストール手順
Gemfile
に次の内容を追加してbundle install
を実行します。
# N+1 count query killer for ActiveRecord |