N+1 — детально?

Ответ

1 findAll() + N доп. запросов на lazy-коллекции при обращении к ним: 1000 заказов → 1001 SQL. Обнаружение: hibernate.generate_statistics=true, datasource-proxy. Решения: JOIN FETCH, @EntityGraph, @BatchSize(100), @Fetch(FetchMode.SUBSELECT).

Разбор: Классический N+1: один запрос на коллекцию-родитель (findAll) плюс по одному запросу на каждую lazy-связь при обращении к ней — для 1000 заказов выходит 1001 SQL. Дистракторы путают причину и счёт: проблему провоцирует именно LAZY при итерации (а не EAGER), запросов 1+N, а решают её JOIN FETCH/@EntityGraph/@BatchSize, а не fetch-size драйвера или second-level cache.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться