Ответ
Проблема N+1 возникает, когда для получения связанных данных выполняется один основной запрос, а затем N дополнительных запросов для каждой записи из основного результата. Это приводит к неоптимальной работе приложения.
Пример с React и GraphQL:
// Плохо: запрашиваем пользователей, затем отдельно их заказы
const { data: users } = useQuery(GET_USERS);
users.map(user => (
<div key={user.id}>
{user.name}
<Orders userId={user.id} /> // Внутри Orders свой запрос GET_ORDERS
</div>
));
Решение - загружать связанные данные одним запросом:
query GetUsersWithOrders {
users {
id
name
orders {
id
total
}
}
}
Проблема характерна для ORM, GraphQL, REST API. Оптимизировать можно через:
- Жадную загрузку (eager loading)
- Пакетные запросы
- Даталоадеры (GraphQL)