Вы хорошо описали последовательность действий и диагностику. Расскажите, как именно вы используете select_related и prefetch_related для оптимизации запросов в Django ORM?

select_related загружает одиночные связи SQL JOIN, а prefetch_related делает дополнительные запросы и связывает объекты в Python. Выбирайте только связи, действительно используемые при построении ответа.

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

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

select_related загружает одиночные связи SQL JOIN, а prefetch_related делает дополнительные запросы и связывает объекты в Python. Выбирайте только связи, действительно используемые при построении ответа.

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

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

select_related загружает одиночные связи SQL JOIN, а prefetch_related делает дополнительные запросы и связывает объекты в Python. Выбирайте только связи, действительно используемые при построении ответа.

Например, для order.customer подходит select_related('customer'), а для коллекции order.items — prefetch_related('items'), если такие связи определены в модели. Без предварительной загрузки сериализатор может выполнять дополнительный запрос для каждой строки. Но prefetch огромной коллекции ухудшит память и latency, поэтому учитывают пагинацию и фильтрацию. Проверяйте итоговые SQL и объём данных, а не только число вызовов ORM. Отдельные filter на related manager могут потребовать новый запрос.

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

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

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

Подробнее