Назад до блогу

High‑load: база даних під навантаження — індекси, пагінація, N+1 і читання query plan

Що робити, коли “все повільно”: індекси, курсор‑пагінація, уникнення N+1, денормалізація, EXPLAIN/ANALYZE і практичний порядок оптимізації без магії.

22 квіт. 2026 р.

High‑load часто починається з БД

Найчастіше bottleneck — це не “слабкий сервер”, а невдалий запит: відсутній індекс, неправильна пагінація, N+1 або надто широкі JOIN. Хороша новина: це лікується дисципліною.

1) Індекси: що індексувати

  • Поля фільтрів і сортувань, які використовуються найчастіше.
  • Складені індекси під типові комбінації (status + createdAt).
  • Не забувай про індекси для foreign keys.

2) Пагінація

  • Offset‑пагінація деградує на великих таблицях.
  • Cursor‑pagination стабільніша: “дай наступні після id/createdAt”.

3) N+1 і “випадкові” запити

Коли список елементів тригерить запит на кожен елемент — ви гарантовано впираєтесь у ліміти. Вирішується батчингом, prefetch, правильними JOIN або кешем.

4) EXPLAIN / query plan

  • Дивись: sequential scan, expensive sort, nested loops.
  • Оптимізуй спочатку найчастіші запити, а не “найкрасивіші”.

Підсумок

Стабільний high‑load починається з БД: індекси, правильна пагінація і контроль запитів. Це дає найбільший ефект за мінімальну ціну.

Релевантні статті