🖥

Rails Admin が重い - N+1クエリに対策する設定

2024/06/27に公開

設定例

たとえば user 対 books が関連している場合、
rails_admin.rb に以下のように設定

RailsAdmin.config do |config|
  ...

  config.model 'User' do
    configure :books do
      eager_load true
    end
  end

ページ閲覧で発行されるSQLクエリの例

RailsAdminの設定は eager load という名前だが、 Railsの eager load ではなく preaload 的なクエリが発行されていた

SELECT `users`.* FROM `users` ORDER BY users.id desc LIMIT 20 OFFSET 0

SELECT `books`.* FROM `books` WHERE `books`.`user_id` IN (65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 146)

Rails の eager load だとデータ量によっては逆に負荷が高まってしまうと思ったが、preload してくれるなら安心かもしれない

場合によってRails の eager load クエリになるかどうかの検証はしていない

公式

https://github.com/railsadminteam/rails_admin/wiki/Associations-basics#eager-load

Eager load

Associations can be configured to be eager-loaded to prevent N+1 queries. belongs_to associations are eager-loaded by default, but you can configure additional eager-loads like:

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

公開日時

2024-06-24

Discussion