Samengestelde indexen en kolomvolgorde
Kies de kolomvolgorde voor samengestelde indexen, begrijp de regel van het linkervoorvoegsel en ontwerp indexen die meerdere query's ondersteunen.
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_atIndexvolgorde = 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 neededNiet-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?
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
- B-tree-, hash-, GiST- en GIN-indexen
- Samengestelde indexen en kolomvolgorde
- Partiële indexen en expressie-indexen
- Indexonderhoud en bloat