Вопрос проверяет знания оптимизаций запросов в Django ORM для уменьшения количества запросов к базе.
select_related использует SQL JOIN для выборки связанных объектов одного уровня (ForeignKey, OneToOne), а prefetch_related делает отдельный запрос и объединяет объекты в Python, подходит для отношений ManyToMany и обратных ForeignKey.
select_related:
Эффективен для «один к одному» и «многие к одному».
Добавляет JOIN к основному запросу.
Загружает связанные объекты одним запросом.
prefetch_related:
Используется для «многие ко многим» и обратных связей.
Выполняет отдельный запрос для связанных объектов.
После запроса связывает данные в Python.
# Пример
orders = Order.objects.select_related('customer')
items = Order.objects.prefetch_related('items')Вывод:
Выбор зависит от типа связи и объема данных для оптимизации производительности.