Сначала измерьте число и длительность SQL-запросов, затем устраните подтверждённый N+1 через подходящую загрузку связей. Кеширование не должно маскировать необъяснённую дорогую выборку.
Новый публичный API должен отдавать каталог за 150 мс, но текущая выборка Django ORM тянет связанные объекты и иногда делает десятки запросов. Что выберешь первым: снять журнал SQL-запросов и подробный план выполнения запроса PostgreSQL, исправить загрузку связей в Django ORM или сразу добавить кеш — и почему?
Сначала измерьте число и длительность SQL-запросов, затем устраните подтверждённый N+1 через подходящую загрузку связей. Кеширование не должно маскировать необъяснённую дорогую выборку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала измерьте число и длительность SQL-запросов, затем устраните подтверждённый N+1 через подходящую загрузку связей. Кеширование не должно маскировать необъяснённую дорогую выборку.
select_related подходит для ForeignKey/OneToOne, prefetch_related — для коллекций и отдельных связанных запросов. После исправления повторите замер; дорогие запросы исследуйте через EXPLAIN, а EXPLAIN ANALYZE запускайте с учётом фактического выполнения. Проверяйте объём ответа, сериализацию и p95/p99. Кеш добавляют при понятной политике актуальности и инвалидирования.