Junior — Middle
97
Comment Django évite-t-il le problème N+1 lors de l'exécution de requêtes à la base de données?
Réponse de l'IA
sobes.tech IA
В Django проблема N+1 запросов решается с помощью методов select_related и prefetch_related.
-
select_relatedиспользуется для жадной загрузки связанных объектов через SQL JOIN, что уменьшает количество запросов при работе с ForeignKey и OneToOne полями. -
prefetch_relatedзагружает связанные объекты отдельным запросом и затем связывает их в Python, что эффективно для ManyToMany и обратных связей.
Пример:
# Без оптимизации:
books = Book.objects.all()
for book in books:
print(book.author.name) # для каждого book будет отдельный запрос к author
# С использованием select_related:
books = Book.objects.select_related('author').all()
for book in books:
print(book.author.name) # один запрос с JOIN, избегаем N+1
Таким образом, Django ORM позволяет оптимизировать запросы и избежать проблемы N+1.