Wat is Index (databaseindex)?
Datastructuur in een database om op basis van een waarde in een bepaalde kolom van een tabel snel de plaats te vinden van de rijen met die waarde. Vaak worden B+-bomen gebruikt. Ze maakt zoekopdrachten sneller, maar moet bij elke toevoeging, wijziging of verwijdering van een rij worden bijgehouden en neemt opslagruimte in.
Japanse benaming: インデックス
“Index (databaseindex)” komt voor in 4 oefenvragen uit 1 onderwerpen, bijv. Basis van databases.
Vakgebied: Basis van databases
Hoe een B+-boomindex werkt
Indexen van relationele databases gebruiken vaak B+-bomen. Een B+-boom is een boomstructuur met veel takken per knoop en hetzelfde aantal niveaus van de wortel naar elk blad; de bladeren bevatten kolomwaarden en de plaatsen van rijen in volgorde van de waarden en zijn achter elkaar aan elkaar gekoppeld. Als elke knoop zich in 100 takken splitst, kunnen drie niveaus 1 miljoen items onderscheiden, dus zelfs in een tabel van 1 miljoen rijen wordt de gezochte rij in enkele leesacties bereikt. Omdat de bladeren in volgorde van de waarden zijn gekoppeld, kan de index niet alleen worden gebruikt voor zoekopdrachten met =, maar ook voor zoekopdrachten op een bereik, zoals BETWEEN, en voor sorteren met ORDER BY.
Wanneer een index helpt en wanneer niet
Een index is effectief op een zeer selectieve kolom, waarbij een voorwaarde de rijen beperkt tot een klein deel van het geheel. Een kolom waarvan alle waarden verschillend zijn, zoals een lidnummer, is ideaal, maar bij een kolom met slechts twee waarden, zoals geslacht, voldoet ongeveer de helft van de rijen, en dan is een full table scan die de tabel in volgorde leest vaak sneller dan rijen een voor een via de index ophalen. Een gewone index is soms ook onbruikbaar voor voorwaarden die een functie op de kolom toepassen of voor overeenkomsten op het einde, zoals LIKE '%sen'.
Veelgestelde vragen
Moet er op elke kolom een index worden aangemaakt?
Nee. Hoe meer indexen er zijn, hoe meer onderhoud er bij elke toevoeging of wijziging van een rij nodig is en hoe meer opslag er wordt gebruikt. Maak indexen aan op kolommen die vaak als zoek- of joinvoorwaarde worden gebruikt en de rijen voldoende beperken.
Waarom wordt een index niet gebruikt, ook al is hij aangemaakt?
Mogelijke redenen zijn dat de optimizer oordeelt dat er zoveel rijen voldoen dat een full table scan sneller is, of een voorwaarde die de volgorde van de index niet kan benutten, zoals een voorwaarde die een functie op de kolom toepast of een LIKE met een overeenkomst op het einde.