Новый публичный API должен отдавать каталог за 150 мс, но текущая выборка Django ORM тянет связанные объекты и иногда делает десятки запросов. Что выберешь первым: снять журнал SQL-запросов и подробный план выполнения запроса PostgreSQL, исправить загрузку связей в Django ORM или сразу добавить кеш — и почему?

Сначала измерьте число и длительность SQL-запросов, затем устраните подтверждённый N+1 через подходящую загрузку связей. Кеширование не должно маскировать необъяснённую дорогую выборку.

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

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

Сначала измерьте число и длительность SQL-запросов, затем устраните подтверждённый N+1 через подходящую загрузку связей. Кеширование не должно маскировать необъяснённую дорогую выборку.

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

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

Сначала измерьте число и длительность SQL-запросов, затем устраните подтверждённый N+1 через подходящую загрузку связей. Кеширование не должно маскировать необъяснённую дорогую выборку.

select_related подходит для ForeignKey/OneToOne, prefetch_related — для коллекций и отдельных связанных запросов. После исправления повторите замер; дорогие запросы исследуйте через EXPLAIN, а EXPLAIN ANALYZE запускайте с учётом фактического выполнения. Проверяйте объём ответа, сериализацию и p95/p99. Кеш добавляют при понятной политике актуальности и инвалидирования.

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

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

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

Подробнее