Вы хорошо объяснили различия между select_related и prefetch_related. Можете привести пример, когда использование prefetch_related может привести к ухудшению производительности?

prefetch_related может замедлить запрос, если загружает много ненужных связанных объектов: растут объём данных, память и стоимость дополнительного SQL. Особенно заметно это на больших выборках.

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

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

prefetch_related может замедлить запрос, если загружает много ненужных связанных объектов: растут объём данных, память и стоимость дополнительного SQL. Особенно заметно это на больших выборках.

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

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

prefetch_related может замедлить запрос, если загружает много ненужных связанных объектов: растут объём данных, память и стоимость дополнительного SQL. Особенно заметно это на больших выборках.

Например, для тысячи авторов заранее выгружают все книги, хотя экран показывает лишь количество. В этом случае aggregate/annotate может быть уместнее. Ещё пример: после prefetch вызывают отдельный related.filter(...), который не использует ожидаемый кеш полного набора. Большой список родительских ID делает IN-запрос и сборку объектов дорогими. Используйте ограниченную выборку родителей и целевой Prefetch с нужным queryset; сравнивайте SQL, время и пиковую память. Меньше запросов не всегда означает быстрее.

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

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

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

Подробнее