Расскажи подробнее, как select_related и prefetch_related устроены под капотом — что происходит, когда вызываешь тот или иной метод.

select_related добавляет JOIN и загружает связанные объекты в одном SQL; prefetch_related выполняет дополнительные запросы и связывает результаты в Python. Оба меняют план загрузки ленивого QuerySet.

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

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

select_related добавляет JOIN и загружает связанные объекты в одном SQL; prefetch_related выполняет дополнительные запросы и связывает результаты в Python. Оба меняют план загрузки ленивого QuerySet.

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

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

select_related добавляет JOIN и загружает связанные объекты в одном SQL; prefetch_related выполняет дополнительные запросы и связывает результаты в Python. Оба меняют план загрузки ленивого QuerySet.

select_related подходит для одиночных связей ForeignKey и OneToOne: поля связанных строк входят в основной результат. Prefetch удобен для обратных и many-to-many связей, где JOIN размножил бы строки. Он собирает связанные записи для выбранных родителей и заполняет кеш отношений. Цена — дополнительная память и запросы; последующий иной фильтр может не использовать этот кеш. Сам вызов метода обычно не выполняет SQL: работа начинается при вычислении QuerySet. Выбор проверяют по реальному шаблону доступа.

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

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

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

Подробнее