Вступить в клуб →
лёгкаявопросPostgreSQL, ORM и оптимизация запросов

Список из 200 заказов делает 201 запрос к базе

В логе запросов на одну страницу списка приходится 201 обращение к базе. В коде страницы:

orders = Order.objects.all()[:200]
for order in orders:
    print(order.user.email)

Почему запросов оказалось 201?

  • Один запрос на список плюс по одному на каждую страницу пагинации — обычное поведение ORM
  • Так и должно быть: 200 точечных запросов по первичному ключу быстрее, чем один JOIN
  • Это N+1: обращение к order.user на каждой итерации порождает отдельный запрос
  • Число запросов определяется размером пула соединений и от кода приложения не зависит

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела