Лучший первый шаг — снять профиль запросов и найти причину 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 или кеш до анализа скрывают причину, а не устраняют её.