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