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.