Sobes.tech
Назад к вопросам
Junior — Middle
66

Расскажи, как ты устранял проблему N+1 в своем недавно выполненном проекте

Компании, где спрашивали
Северсталь-ИфокомСеверсталь-Ифоком

Ответ от нейросети

sobes.tech AI

Проблему N+1 я устранял, оптимизируя запросы к базе данных. В моём проекте на Java с использованием JPA/Hibernate я заметил, что при загрузке списка сущностей происходило множество дополнительных запросов для связанных данных (например, при загрузке списка заказов — отдельный запрос на каждый заказ для получения деталей).

Для решения я применил жадную загрузку (fetch join) с помощью JPQL или Criteria API, чтобы сразу получить все необходимые данные одним запросом:

String jpql = "SELECT o FROM Order o JOIN FETCH o.details WHERE o.customer.id = :customerId";
List<Order> orders = entityManager.createQuery(jpql, Order.class)
    .setParameter("customerId", customerId)
    .getResultList();

Также использовал аннотации @EntityGraph для указания, какие связи загружать сразу. Это значительно снизило количество запросов и улучшило производительность.

В некоторых случаях применял пакетную загрузку (batch fetching), чтобы Hibernate загружал связанные сущности небольшими партиями, а не по одной.