Django Academy · Les

Het N+1-probleem herkennen

De klassieke valkuil van één query per rij herkennen

Les 1 van 413 stappen

Het N+1-probleem herkennen is een gratis Django Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Django Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Django Academy bevat in totaal 4 lessen.

Wat N+1 betekent

Het N+1-probleem ontstaat wanneer je code één query uitvoert om een lijst op te halen en daarna voor elk item in die lijst nog één query uitvoert. 🐢

Waar het zich verbergt

Het probleem verbergt zich meestal in een lus over objecten, waarbij elke iteratie ongemerkt opnieuw een gerelateerde rij uit de database ophaalt.

Een klein voorbeeld

Stel je voor dat je boeken weergeeft en de auteur van elk boek afdrukt. De onderstaande lus lijkt onschuldig, maar voert op elke regel een nieuwe query uit.

for book in Book.objects.all():
    print(book.author.name)

De queries tellen

Eén query laadt alle boeken. Daarna voert elke toegang tot book.author een eigen query uit. 100 boeken betekenen dus 101 verbindingen met de database.

Waarom 1 en daarna N

Daar komt de naam vandaan: 1 query voor de lijst met bovenliggende objecten, plus N extra queries, één voor elk gerelateerd object dat je aanraakt.

Lui laden is de oorzaak

Django laadt gerelateerde rijen lui, dus pas wanneer je erom vraagt. Dat is handig voor één object, maar problematisch wanneer je dit in een lus doet.

Het schaalt slecht

De schade groeit mee met je gegevens. Tien rijen lijken prima, maar tienduizend rijen veranderen één paginaweergave in een stortvloed aan queries.

Sjablonen veroorzaken het ook

Een sjabloon dat gerelateerde gegevens binnen een for-lus afdrukt, veroorzaakt precies dezelfde storm, ook al zie je zelf geen Python-lus.

{% for book in books %}
  {{ book.author.name }}
{% endfor %}

Zo herken je het

Let op toegang tot een gerelateerd object, zoals obj.parent, binnen een lus. Dat patroon is altijd een waarschuwingssignaal.

Queries zichtbaar maken

Tijdens DEBUG kun je queries rechtstreeks tellen met connection.queries. Daarmee bewijs je hoeveel verbindingen een view werkelijk maakt.

from django.db import connection
print(len(connection.queries))

Het goede nieuws

Zodra je het probleem kunt zien, geeft Django je twee hulpmiddelen om al die queries terug te brengen tot slechts enkele. Je maakt er hierna kennis mee. 🚀

Korte controle

Laten we controleren of het N+1-patroon duidelijk is.

Samenvatting

Het N+1-probleem is één query voor een lijst plus één query per gerelateerd object, veroorzaakt door lui laden binnen lussen. Herken het door binnen lussen op toegang tot gerelateerde gegevens te letten. ✅

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Het N+1-probleem herkennen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Django Academy, waaronder “Het N+1-probleem herkennen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Django Academy bevat in totaal 4 lessen.

Wat leer ik in “Het N+1-probleem herkennen”?

De klassieke valkuil van één query per rij herkennen Je oefent met Django Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Django Academy te beginnen?

Ervaring vooraf is niet nodig. Django Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Het N+1-probleem herkennen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Django Academy?

Ja. Elke les over Django Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het N+1-probleem herkennen
  2. select_related voor Foreign Keys
  3. prefetch_related voor M2M
  4. Profileren met de Debug Toolbar
← Terug naar Django Academy