TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.82K subscribers
Post #2216 1.68K
Проблема N+1 запросов
(продолжение к предущему посту)

Проблема N+1 запросов - это ситуация, когда один запрос возвращает набор результатов, и для каждого из них требуется дополнительный запрос. Количество запросов, необходимых для загрузки страницы, зависит от размера набора результатов, что приводит к низкой производительности при большом значении N.

Пример (псевдокод):

// 1 запрос
users = db.query('SELECT * FROM users');

// ...что приводит к N дополнительным запросам
for (const user of users) {
posts = db.query(`
SELECT * FROM posts
WHERE user_id = user->id`);
user.posts = posts;
}
// Теперь можно вернуть результат запрашивающей стороне


Вместо этого можно переписать код как один запрос с JOIN, чтобы получить все данные за одно обращение к БД:

results = await db.query(
`SELECT u.*, p.*
FROM users u
LEFT JOIN posts p
ON u->id = p->user_id`);


Для некоторых запросов влияние N+1 может быть минимальным. Если N — небольшое число, всё может казаться «быстрым», если БД хорошо настроена и находится рядом с серверами приложений. Но при N=100 начинают проявляться замедления, и БД загружается сильнее, чем необходимо. Устранение таких проблем улучшает пользовательский опыт и снижает нагрузку на БД.
Telegram METANIT.COM Проблема N+1 запросов (продолжение в следующем посте)
  • 👍 9
  • 🤗 3
  • 🔥 2
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →