Проблема N+1 возникает, когда после выборки постов выполняется отдельный count для каждого. Посчитайте связанные строки агрегированным SQL-запросом, возвращая только числа.
Опишите проблему N+1 запросов при агрегации. Как эффективно посчитать количество связанных объектов, например количество комментариев у 100 постов, без загрузки всех связанных сущностей в память Python?
Проблема N+1 возникает, когда после выборки постов выполняется отдельный count для каждого. Посчитайте связанные строки агрегированным SQL-запросом, возвращая только числа.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Проблема N+1 возникает, когда после выборки постов выполняется отдельный count для каждого. Посчитайте связанные строки агрегированным SQL-запросом, возвращая только числа.
В Django типичный вариант — Post.objects.annotate(comment_count=Count('comments')), где имя связи зависит от модели. В SQL используют LEFT JOIN с GROUP BY или агрегированный подзапрос. Для поста без комментариев считайте идентификатор комментария, а не COUNT(*). Несколько joins могут умножить строки: проверяйте distinct или раздельные агрегации.