Django modele, Relacje między modelami - 109:

109. Na czym polega problem N+1 zapytań? Jak w Django 'select_related' i 'prefetch_related' rozwiązują ten problem?
Odpowiedź:
  • Problem N+1 zapytań pojawia się, gdy wykonujesz zapytania w pętli, co prowadzi do wykonania wielu zapytań SQL.
    • Załóżmy, że masz model Author i Book, i chcesz pobrać wszystkie książki danego autora. Jeśli nie użyjesz optymalizacji zapytań, Django wykona zapytanie dla każdego autora, aby pobrać jego książki.
  • select_related rozwiązuje problem w przypadku relacji One-to-Many (i One-to-One) poprzez wykonywanie JOIN w jednym zapytaniu.
  • prefetch_related rozwiązuje problem w przypadku Many-to-Many i One-to-Many z wieloma powiązanymi obiektami, wykonując oddzielne zapytanie, a następnie łącząc wyniki w pamięci.