0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-06-24

設定例

たとえば 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 クエリになるかどうかの検証はしていない

公式

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オープンチャットもご利用ください。

プロフィール・経歴

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?