“Verbeter uw performance met database indexes”
Verschillende factoren, verschillende verantwoordelijkheden
Om de performance optimaal te houden dienen hosters te investeren in goede technische infrastructuur. Combell stelt kwaliteit steeds voorop en investeert al sinds jaar en dag in hardware van hoge kwaliteit en de nodige expertise om die te ondersteunen. Maar dit volstaat niet om hoge performance te garanderen: ook de ontwikkelaar heeft hier een belangrijk verantwoordelijkheid.
Het is niet alleen een kwestie van efficiënte programmacode te gebruiken, maar ook de verwerkingstijd van externe databronnen te minimaliseren. De meest courante implementatie hiervan is de database. Via SQL kan u data uit uw database filteren die u kan gebruiken in uw applicatie. Hoe snel uw applicatie ook werkt, u zal altijd afhankelijk zijn van uw database.
Database indexes en de metafoor van het boek
Die performance afhankelijkheid is bij kleine datasets minimaal. Het is pas wanneer uw database veel data bevat dat u structurele vertraging kan vaststellen. Een belangrijke oplossing is het gebruik van indexes. U kan dit principe het makkelijkst vergelijken met de trefwoordenlijst in een boek.
Als u de vraag zou krijgen om in een boek met 10 bladzijden de frequentie van het woord “huis” te tellen, dan zou u op bladzijde één kunnen beginnen. Dit valt al bij al mee, maar bij een boek van 1000 bladzijden wordt het zoeken een hele opgave. Maar als er in uw boek een trefwoordenlijst zou zijn, kan u vliegensvlug zien hoe vaak de term voorkomt en vooral waar die voorkomt.
Indexering als onderdeel van het database ontwerp
Het indexeren van uw database is geen actie die u terloops uitvoert, het is een essentieel onderdeel van het database ontwerp. Bij het opbouwen van uw databasetabellen is het belangrijk dat u weet welke velden er geïndexeerd moeten worden. Hier hangt ook een functionele vereiste aan vast: u dient op voorhand te weten op welke velden er voornamelijk gezocht moet worden.
De reflex om op elk veld een index te plaatsen dient ingetoomd te worden omdat indexering een “trade off” is: enerzijds verhoogt u de performance van het ophalen, maar anderzijds kost het tijd en resources om de indexes up-to-date te houden. De balans tussen lezen en schrijven moet ten allen tijde in de gaten gehouden worden. Net daarom is het een goed idee om vanuit uw functionele analyse te weten te komen wat de belangrijkste velden zijn en hoe erop gefilterd wordt. Vanuit een niet-functioneel standpunt is de enige kennis over de lees/schrijf ratio mooi meegenomen.
Implementatie
De implementatie van de index kan op een vrij eenvoudige manier via een SQL statement. U kan gebruik maken van de “create index” syntax, en zelfs binnen een “alter table” statement hebt u de mogelijkheid om indexes te definiëren. Het is belangrijk dat u bij tekstvelden de lengte van de index opgeeft.
Hoe compacter de index hoe beter, maar een te compacte index resulteert in een laag rendement. Als u bijvoorbeeld de term “Domeinnaam” wil indexeren en u opteert voor een index van 3 karakters, dan kan enkel “Dom” geïndexeerd worden. Termen zoals “Domino” of “Domein” of simpelweg “Dom” zelf zouden ook opduiken. Een te lange index neemt teveel ruimte in en vereist tijd om bij te werken.
Kortom: een goede balans tussen de te indexeren velden en de indexlengte zal ervoor zorgen dat u een maximaal rendement haalt.