N+1 устраняют загрузкой связанных данных заранее: JOIN для подходящих одиночных связей или batch/prefetch для коллекций. Сначала подтверждают, что лишние запросы действительно появляются при обходе объектов.
Как решается проблема N+1 запросов в ORM?
N+1 устраняют загрузкой связанных данных заранее: JOIN для подходящих одиночных связей или batch/prefetch для коллекций. Сначала подтверждают, что лишние запросы действительно появляются при обходе объектов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
N+1 устраняют загрузкой связанных данных заранее: JOIN для подходящих одиночных связей или batch/prefetch для коллекций. Сначала подтверждают, что лишние запросы действительно появляются при обходе объектов.
В Django используют select_related и prefetch_related, в других ORM — соответствующие стратегии eager loading. Если нужны только количество или сумма, часто лучше агрегат, а не загрузка всех связанных записей. Проверяйте сериализаторы и шаблоны: они могут неявно обращаться к lazy-связям. После исправления измеряют объём и память, не только число SQL. Для больших выборок нужны pagination и ограниченные batches.