SQL Academy · Les

EXPLAIN en EXPLAIN ANALYZE lezen

Lees de planboom, begrijp het verschil tussen geschatte kosten en werkelijke tijd en herken de zware knooppunten.

Les 1 van 414 stappen

EXPLAIN en EXPLAIN ANALYZE lezen is een gratis SQL Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.

Waarom EXPLAIN?

EXPLAIN toont de strategie van de queryplanner om een query uit te voeren, zonder de query uit te voeren. EXPLAIN ANALYZE voert de query WEL uit en toont ook de werkelijke tijden.

Basisgebruik van EXPLAIN

Toon het geschatte plan:

EXPLAIN SELECT * FROM orders WHERE user_id = 42;
--                            QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   Index Cond: (user_id = 42)

EXPLAIN ANALYZE

Voert de query uit en voegt werkelijke tijden en aantallen rijen toe:

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 ms

De boomstructuur lezen

Plannen zijn bomen. Inspringing = onderliggende node. Onderliggende nodes worden vóór hun bovenliggende nodes uitgevoerd.

Aggregate
  -> Hash Join
     Hash Cond: (o.user_id = u.id)
     -> Seq Scan on orders
     -> Hash
        -> Seq Scan on users

Kosten versus tijd

De kolom cost bevat TWEE getallen: startup_cost..total_cost. Dit zijn willekeurige eenheden van de queryplanner, geen seconden. Gebruik actual time voor echte waarden.

rows = geschat; actual rows = werkelijk

rows is de schatting van de queryplanner. actual rows is wat er werkelijk gebeurde. Als ze sterk verschillen, kloppen de statistieken niet.

Lussen vermenigvuldigen de tijd

Bij geneste lussen betekent actual time=X loops=N dat elke iteratie X duurde; per knooppunt is het totaal X×N.

Nested Loop  (actual time=0.05..2.03 rows=500)
  -> Seq Scan on orders  (actual ... loops=1)
  -> Index Scan using users_pkey  (actual time=0.01..0.01 loops=500)

BUFFERS toont je I/O

EXPLAIN (ANALYZE, BUFFERS) rapporteert bufferhits en -lezingen — de I/O achter de tijdmetingen:

EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4

Opties voor FORMAT

Gebruik JSON of YAML voor programmatische verwerking:

EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;

Gebruik EXPLAIN ANALYZE niet voor destructieve instructies

EXPLAIN ANALYZE voert een UPDATE/DELETE/INSERT daadwerkelijk uit. Plaats dit in een transactie met ROLLBACK als je het wilt inspecteren zonder de wijzigingen vast te leggen:

BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;

Veelvoorkomende planknooppunten

  • Seq Scan — leest de hele tabel
  • Index Scan — gebruikt een index
  • Bitmap Heap Scan — combineert meerdere indexen
  • Hash Join / Merge Join / Nested Loop — koppelstrategieën
  • Sort, Aggregate, Limit, Materialize

Werkstroom voor het lezen van plannen

  1. Voer EXPLAIN ANALYZE uit op de trage query
  2. Zoek het knooppunt met de hoogste actual time
  3. Vergelijk het geschatte aantal rows met actual rows
  4. Controleer of indexen worden gebruikt
  5. Herhaal: voeg een index toe / herschrijf de query / voer ANALYZE uit

Samenvatting

EXPLAIN ANALYZE is je belangrijkste hulpmiddel voor prestaties.

  • De kosten zijn relatief, de tijd is echt
  • Geschatte tegenover werkelijke rijen onthult problemen met statistieken
  • BUFFERS toont I/O
  • Plaats destructieve queries tussen BEGIN en ... ROLLBACK

Korte controle

Wat is het verschil tussen EXPLAIN en EXPLAIN ANALYZE?

Gratis beginnen

Leer SQL 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
46
Lessen
183

Veelgestelde vragen

Is de les “EXPLAIN en EXPLAIN ANALYZE lezen” gratis?

Ja — de volledige tekst van “EXPLAIN en EXPLAIN ANALYZE lezen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.

Wat leer ik in “EXPLAIN en EXPLAIN ANALYZE lezen”?

Lees de planboom, begrijp het verschil tussen geschatte kosten en werkelijke tijd en herken de zware knooppunten. Je oefent met SQL 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 SQL Academy te beginnen?

Ervaring vooraf is niet nodig. SQL 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 “EXPLAIN en EXPLAIN ANALYZE lezen”?

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 SQL Academy?

Ja. Elke les over SQL 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. EXPLAIN en EXPLAIN ANALYZE lezen
  2. Sequentiële scans versus indexscans
  3. Hash-join versus merge-join versus geneste lus
  4. Trage query's herkennen en oplossen
← Terug naar SQL Academy