Практическое задание

Лучший первый шаг — снять профиль запросов и найти причину 35 обращений. После этого выборочно применяют select_related или prefetch_related к действительно нужным связям.

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

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

Лучший первый шаг — снять профиль запросов и найти причину 35 обращений. После этого выборочно применяют select_related или prefetch_related к действительно нужным связям.

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

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

Условие

Практическое задание Django ORM создаёт 35 запросов на страницу каталога. Какое первое решение наиболее зрелое?

  • Игнорировать проблему, пока средняя задержка низкая.
  • Снять трассировку, найти запросы и затем настроить выборочную загрузку связей.
  • Включить prefetch_related для всех связей модели.
  • Переписать маршрут на FastAPI.
  • Применить select_related к известным одиночным связям после проверки профиля.
  • Поставить Redis перед маршрутом без анализа SQL.

Ответ

Лучший первый шаг — снять профиль запросов и найти причину 35 обращений. После этого выборочно применяют select_related или prefetch_related к действительно нужным связям.

Правильный основной вариант — второй. Пятый тоже является разумным последующим действием, поскольку прямо требует проверки профиля и относится к одиночным связям. Само число 35 ещё не объясняет latency: нужны повторы SQL, время, объём данных и наличие N+1. select_related подходит для одиночных FK/OneToOne, а prefetch_related часто нужен для коллекций. Загрузка всех связей может увеличить память и объём ответа. Смена framework или кеш до анализа скрывают причину, а не устраняют её.

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

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

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

Подробнее