Для одной простой ForeignKey-связи select_related обычно получает данные одним JOIN-запросом, prefetch_related — двумя запросами. Точное число зависит от связей, вложенности и последующего доступа.
[имя] спросил: Сколько запросов в базу выполнилось бы, если использовать select_related, и сколько — если использовать prefetch_related?
Для одной простой ForeignKey-связи select_related обычно получает данные одним JOIN-запросом, prefetch_related — двумя запросами. Точное число зависит от связей, вложенности и последующего доступа.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для одной простой ForeignKey-связи select_related обычно получает данные одним JOIN-запросом, prefetch_related — двумя запросами. Точное число зависит от связей, вложенности и последующего доступа.
Первый запрос prefetch получает основные объекты, второй — связанные и объединяет их в Python. Для нескольких путей или более сложных отношений запросов может быть больше, а при пустой основной выборке некоторые не понадобятся. select_related не является универсальным решением для many-to-many. Без конкретного QuerySet нельзя честно назвать точное число для всего сценария; проверьте SQL вместе с тем, как сериализатор или шаблон обращается к данным.