SQL Academy · Les

Samengestelde indexen en kolomvolgorde

Kies de kolomvolgorde voor samengestelde indexen, begrijp de regel van het linkervoorvoegsel en ontwerp indexen die meerdere query's ondersteunen.

Les 2 van 413 stappen

Samengestelde indexen en kolomvolgorde is een gratis SQL Academy-les op CoddyKit. Dit is les 2 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.

Wat is een samengestelde index?

Een index op meer dan één kolom. PostgreSQL-B-trees kunnen maximaal 32 kolommen indexeren; in de praktijk zijn 2–4 kolommen gebruikelijk.

CREATE INDEX orders_user_created_idx ON orders(user_id, created_at DESC);

Waarom samengestelde indexen gebruiken?

Twee scenario's:

  • De query filtert tegelijk op meerdere kolommen
  • De query filtert op één kolom en sorteert op een andere

Regel van het meest linkse voorvoegsel

Een index op (a, b, c) kan het volgende ondersteunen:

  • WHERE a = ?
  • WHERE a = ? AND b = ?
  • WHERE a = ? AND b = ? AND c = ?

De index ondersteunt NIET alleen WHERE b = ? en ook niet WHERE c = ?.

De volgorde is belangrijk

Plaats de meest selectieve én meest gebruikte filterkolom vooraan. Gelijkheidskolommen komen vóór bereikskolommen:

CREATE INDEX orders_user_total_idx ON orders(user_id, total);

-- Best for:  WHERE user_id = 42 AND total > 100
-- Also OK:  WHERE user_id = 42
-- Useless:  WHERE total > 100   (without user_id)

Gelijkheid versus bereik

Gelijkheids-predicaten gebruiken de index efficiënt; bereiken gebruiken deze ook, maar beperken de verdere bruikbaarheid. Gelijkheidskolommen horen vooraan te staan:

-- Index: (status, created_at)
WHERE status = 'paid' AND created_at >= ...   -- both columns used
WHERE created_at >= ... AND status = 'paid'  -- index used for status, range scan on created_at

Indexvolgorde = sorteervolgorde

Een index op (user_id, created_at DESC) ondersteunt "bestellingen van een gebruiker, nieuwste eerst" zonder een afzonderlijke sorteerbewerking:

EXPLAIN ANALYZE
SELECT * FROM orders
WHERE user_id = 42
ORDER BY created_at DESC LIMIT 10;
-- Index Scan, no Sort node needed

Niet-sleutelkolommen opnemen (INCLUDE)

PG 11+ ondersteunt INCLUDE voor "dekkende" indexen — extra kolommen worden in de bladknooppunten opgeslagen, maar niet voor de volgorde gebruikt:

CREATE INDEX orders_user_idx ON orders(user_id)
  INCLUDE (total, status);

-- Enables Index-Only Scan for queries that need just these columns.

Wanneer je geen samengestelde indexen moet maken

Als er onafhankelijk op de kolommen wordt gezocht, kunnen twee indexen op één kolom meer queries ondersteunen. Samengestelde indexen ruilen flexibiliteit in voor "één query heeft alles".

Combinatie van bitmapindexen

PostgreSQL kan meerdere indexen op één kolom combineren via Bitmap Index Scan:

EXPLAIN ANALYZE
SELECT * FROM orders WHERE user_id = 42 AND status = 'paid';
-- BitmapAnd of two index scans — works without a composite, but slower than the right composite.

Let op indexgroei

Samengestelde indexen zijn breder. Bredere indexen = grotere bestanden = een kleiner deel van de index past in de cache. Kies bewust.

Kolomvolgorde kiezen — een uitgewerkt voorbeeld

Query: "bestellingen voor één gebruiker binnen een datumbereik, gesorteerd op datum".

-- Index design:
CREATE INDEX orders_user_created_idx
  ON orders(user_id, created_at DESC);

-- Query (efficiently uses the index):
SELECT * FROM orders
WHERE user_id = 42
  AND created_at >= NOW() - INTERVAL '30 days'
ORDER BY created_at DESC LIMIT 10;

Samenvatting

Samengestelde indexen ondersteunen filters met meerdere kolommen en voorkomen sorteerstappen.

  • Regel voor het meest linkse voorvoegsel
  • Eerst de kolommen met gelijkheidsvoorwaarden
  • INCLUDE voor kolommen die alleen moeten worden afgedekt
  • Twee losse indexen versus één samengestelde index — hangt af van de querymix

Korte controle

Je hebt een index op (user_id, status, created_at). Welke query kan deze NIET efficiënt gebruiken?

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 “Samengestelde indexen en kolomvolgorde” gratis?

Ja — de volledige tekst van “Samengestelde indexen en kolomvolgorde” 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 “Samengestelde indexen en kolomvolgorde”?

Kies de kolomvolgorde voor samengestelde indexen, begrijp de regel van het linkervoorvoegsel en ontwerp indexen die meerdere query's ondersteunen. 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 2 van 4.

Hoe lang duurt de les “Samengestelde indexen en kolomvolgorde”?

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. B-tree-, hash-, GiST- en GIN-indexen
  2. Samengestelde indexen en kolomvolgorde
  3. Partiële indexen en expressie-indexen
  4. Indexonderhoud en bloat
← Terug naar SQL Academy