Опишите проблему N+1 запросов при агрегации. Как эффективно посчитать количество связанных объектов, например количество комментариев у 100 постов, без загрузки всех связанных сущностей в память Python?

Проблема N+1 возникает, когда после выборки постов выполняется отдельный count для каждого. Посчитайте связанные строки агрегированным SQL-запросом, возвращая только числа.

Короткий ответ

Что ответить на собеседовании

Проблема N+1 возникает, когда после выборки постов выполняется отдельный count для каждого. Посчитайте связанные строки агрегированным SQL-запросом, возвращая только числа.

Подробный разбор

Ответ с пояснениями

Проблема N+1 возникает, когда после выборки постов выполняется отдельный count для каждого. Посчитайте связанные строки агрегированным SQL-запросом, возвращая только числа.

В Django типичный вариант — Post.objects.annotate(comment_count=Count('comments')), где имя связи зависит от модели. В SQL используют LEFT JOIN с GROUP BY или агрегированный подзапрос. Для поста без комментариев считайте идентификатор комментария, а не COUNT(*). Несколько joins могут умножить строки: проверяйте distinct или раздельные агрегации.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее