N+1 Problem — это ситуация, когда приложение выполняет 1 основной запрос, а затем ещё N дополнительных запросов для связанных данных.
Допустим, вы для поста выбираете комментарии. У каждого комментария есть автор (user) имя которого хочется показать. Вам надо для каждого комментария сделать к базе данных отдельный запрос, чтобы получить нужную информацию.
Чем больше комментариев — тем больше нагрузка на базу.
Почему возникает N+1
1️⃣Post.find — 1 запрос
2️⃣ для каждого комментария → comment.user → ещё N запросов
Итого: 1 + N или N+1 запросов.
Обычно проблема решается предзагрузкой данных. Реже — кешированием или предварительной подготовкой данных.
Часто отследить N+1 помогает простой гем bullet
gem "bullet"
#словарь
Группа: @pro_ruby_on_rails_ru
Вопросы: @ilia_zykin
❤️ лайк 🔂 репост
