indexing matters

Dit is meer dan alleen een geheugensteuntje aan mezelf. Het wordt maar al te eenvoudig vergeten terwijl het zo veel verschil kan uitmaken. De wetenschap dat goed indexeren op een grote database bijna zwarte magie is, wil nog niet voorschrijven dat we bij gebrek aan toverspreuken dit helemaal over kunnen slaan.
Zolang je slechts een tabel raadpleegt waar zo'n 7000 rows in zitten zal je niet veel merken van de afwezigheid van indexering. Maar zodra je een join uitvoert gaan de wetten van de grote getallen werken. Ik maakte de fout om de indexering 'later'[1] wel even te doen. De verschillen in tijd spreken voor zichzelf denk ik. De query was vrij simpel

select * from a join b on a.f = b.f where a.g = '100'

Zonder index: 54 seconden
Met index: 0.13 seconden
Uit de cache: 0.05 seconden
En dat door simpelweg in beide tabellen een index te benoemn op veld 'f'. Doe dit als je de database aanmaakt, doe je zwarte magie dan achteraf door gecombineerde sleutels te verzinnen.


[1] Later betekent in deze context vaak op het allerlaatste moment

Comments

Een SELECT *.... foei!! waarschijnlijk gebruik je het alleen om het voorbeeld makkelijker te maken ;-)

tuurluk, de echte query besloeg 4 regels

previous item: Firefox in de herkansing next item: One more.
thank you for watching  Creative Commons License