Voorbereiding op SQL-sollicitatiegesprekken · Les

Kolomvolgorde in samengestelde indexen

De regel van het meest linkse voorvoegsel en de juiste kolomvolgorde voor een workload.

Les 2 van 413 stappen

Kolomvolgorde in samengestelde indexen is een gratis Voorbereiding op SQL-sollicitatiegesprekken-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 Voorbereiding op SQL-sollicitatiegesprekken. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.

De vraag over samengestelde indexen

Zodra je een index op één kolom kunt uitleggen, leggen interviewers de lat hoger: 'Je queryt op customer_id en order_date samen. Hoe zou je dat indexeren?' Het verwachte antwoord is een samengestelde index (met meerdere kolommen) en een onderbouwing van de kolomvolgorde.

In deze les leer je de regel voor het meest linkse voorvoegsel, het ene idee dat vrijwel elke vraag over samengestelde indexen verklaart die je ooit zult krijgen.

Wat een samengestelde index is

Een samengestelde index indexeert meerdere kolommen als een geordend tupel. De vermeldingen worden eerst op de eerste kolom gesorteerd, vervolgens bij gelijke waarden op de tweede kolom, enzovoort, precies zoals een telefoonboek eerst op achternaam en daarna op voornaam wordt gesorteerd.

De volgorde is enorm belangrijk, omdat de prioriteit van de sortering de volgorde volgt die je voor de kolommen opgeeft.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

De regel voor het meest linkse voorvoegsel

De kernregel: een samengestelde index op (A, B, C) kan worden gebruikt voor queries die filteren op een meest links voorvoegsel van die kolommen:

  • A alleen: ja
  • A, B: ja
  • A, B, C: ja
  • B alleen: NEE
  • B, C: NEE

Denk aan het telefoonboek: je kunt iedereen met de achternaam 'Smith' vinden, maar niet efficiënt iedereen met de voornaam 'John', ongeacht de achternaam, omdat het boek niet op die manier is gesorteerd.

Uitgewerkt voorbeeld: treffers op het voorvoegsel

Met de index op (customer_id, order_date) kunnen deze queries de index gebruiken omdat ze beginnen met customer_id:

De eerste gebruikt alleen de eerste kolom. De tweede gebruikt beide kolommen: eerst wordt op customer_id beperkt en vervolgens wordt binnen de op datum gesorteerde vermeldingen van die klant gezocht.

-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;

-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Uitgewerkt voorbeeld: het voorvoegsel wordt gemist

Deze query filtert alleen op de tweede kolom. De index op (customer_id, order_date) kan de opzoeking daarom doorgaans niet aansturen: de vermeldingen zijn niet wereldwijd op order_date gesorteerd.

Als filteren op alleen order_date een veelvoorkomend patroon is, heb je een afzonderlijke index nodig die begint met order_date.

-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';

-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);

Gelijkheid vóór bereik

Een verfijning op seniorniveau: plaats kolommen die met gelijkheid (=) worden gebruikt vóór kolommen die met een bereik (<, >, BETWEEN) worden gebruikt. Zodra de index een bereikskolom bereikt, kan die latere kolommen niet meer gebruiken om de opzoeking verder te beperken.

Voor een query zoals status = 'paid' AND created_at > ? is de juiste volgorde (status, created_at), niet andersom.

-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
  ON orders (status, created_at);

De eerste kolom kiezen

Hoe bepaal je welke kolom eerst komt? Interviewers willen een antwoord op basis van de werkbelasting:

  • Begin met de kolom die in de meeste queries voorkomt, vooral als gelijkheidsfilter.
  • Geef de voorkeur aan een kolom met hoge selectiviteit (veel verschillende waarden), zodat de eerste stap de meeste rijen uitsluit.
  • Houd rekening met de behoeften van ORDER BY: een overeenkomende indexvolgorde kan een sortering voorkomen.

De eerste kolom is de kolom die in je werkelijke mix van queries het meeste filterwerk doet.

Een samengestelde index helpt bij sorteren

Een samengestelde index ondersteunt ook ORDER BY op een meest links voorvoegsel. Omdat vermeldingen eerst op customer_id en daarna op order_date zijn gesorteerd, zijn de bestellingen van één klant op datum sorteren in feite gratis: er is geen afzonderlijke sortering nodig.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

Stapel geen overbodige indexen

Kandidaten maken vaak te veel indexen. Als je al (customer_id, order_date) hebt, is een afzonderlijke index op alleen (customer_id) meestal overbodig: de samengestelde index dekt queries op de eerste kolom al af.

Elke extra index kost opslagruimte en vertraagt schrijfbewerkingen. Het doel is dus de kleinst mogelijke verzameling indexen die je querypatronen afdekt, niet één index per kolom.

Het bewijzen met EXPLAIN

Bevestig zoals altijd de keuze van de planner. Voer na het maken van een samengestelde index EXPLAIN uit en controleer of die als een Index Scan verschijnt en hoeveel rijen de planner schat.

Als een query die niet met het voorvoegsel overeenkomt terugvalt op een sequentiële scan, is dat het bewijs dat de kolomvolgorde niet bij de werkbelasting past. Precies dat zou je aan een interviewer uitleggen.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Zo formuleer je het in het interview

Een kernachtige samenvatting:

'Een samengestelde index wordt van links naar rechts op zijn kolommen gesorteerd, zodat die elk meest links voorvoegsel van die kolommen kan bedienen, maar geen subset aan het einde. Ik begin met de kolom die het sterkst filtert en een hoge selectiviteit heeft, plaats gelijkheidspredicaten vóór bereikspredicaten en stem zo mogelijk af op ORDER BY. Daarna controleer ik dit met EXPLAIN.'

Snelle controle

Pas de regel van het meest linkse voorvoegsel toe.

Samenvatting: volgorde van samengestelde indexen

Belangrijkste punten:

  • Een samengestelde index wordt van links naar rechts gesorteerd; hij ondersteunt alleen het meest linkse voorvoegsel van zijn kolommen.
  • Zet de meest opgevraagde kolom met hoge selectiviteit vooraan.
  • Zet kolommen met gelijkheidsvoorwaarden vóór bereikskolommen.
  • Een overeenkomend voorvoegsel kan ook aan ORDER BY voldoen zonder sortering.
  • Vermijd overbodige indexen met één kolom die al door een samengestelde index worden gedekt, en controleer dit met EXPLAIN.

Volgende: afdekkende indexen die het ophalen uit de heap volledig overbodig maken.

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
30
Lessen
120

Veelgestelde vragen

Is de les “Kolomvolgorde in samengestelde indexen” gratis?

Ja — de volledige tekst van “Kolomvolgorde in samengestelde indexen” 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 Voorbereiding op SQL-sollicitatiegesprekken wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.

Wat leer ik in “Kolomvolgorde in samengestelde indexen”?

De regel van het meest linkse voorvoegsel en de juiste kolomvolgorde voor een workload. Je oefent met Voorbereiding op SQL-sollicitatiegesprekken 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 Voorbereiding op SQL-sollicitatiegesprekken te beginnen?

Ervaring vooraf is niet nodig. Voorbereiding op SQL-sollicitatiegesprekken 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 “Kolomvolgorde in samengestelde indexen”?

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 Voorbereiding op SQL-sollicitatiegesprekken?

Ja. Elke les over Voorbereiding op SQL-sollicitatiegesprekken 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-indexen en hun nut
  2. Kolomvolgorde in samengestelde indexen
  3. Covering-indexen en index-only scans
  4. Wanneer indexen schadelijk zijn: schrijven en selectiviteit
← Terug naar Voorbereiding op SQL-sollicitatiegesprekken