Et indeks fremskynder datahentning. Uden et indeks scanner databasen hver række for at finde matchende poster. Med et indeks hopper den direkte til de relevante rækker. Indekset er en separat datastruktur, der knytter værdier til placeringer. Et bogindeks fungerer på samme måde. Du slår et udtryk op og finder sidetallet. Du læser ikke hver side for at finde det. Databasen gør det samme.
Indekser har en pris. De optager plads. De forsinker indsættelser, opdateringer og sletninger, fordi indekset også skal opdateres. Hver skrivning bliver dyrere. Fordelen er hurtigere læsning. For læsetunge arbejdsbelastninger er indekser afgørende. For skrivetunge arbejdsbelastninger skader for mange indeks ydeevnen. At vælge, hvilke kolonner der skal indekseres, kræver forståelse af forespørgselsmønstrene. Kolonner, der bruges i WHERE-klausuler, JOIN-betingelser og ORDER BY-klausuler, er gode kandidater. Kolonner med lav kardinalitet, som et boolsk flag, er dårlige kandidater, fordi indekset ikke indsnævrer søgningen meget. Sammensatte indekser dækker flere kolonner og kan betjene forespørgsler, der filtrerer på flere felter. Rækkefølgen af kolonner i et sammensat indeks er vigtig. Databasen kan bruge et sammensat indeks til forespørgsler på den første kolonne, men ikke kun på efterfølgende kolonner. Indeksdesign er et kompromis. Målet er at fremskynde de forespørgsler, der er vigtige, uden at forsinke skrivninger mere end nødvendigt.
Indekstyper
- B-træ — standard for de fleste databaser, godt til intervalforespørgsler
- Hash — hurtige lighedsopslag, ingen rækkeviddeunderstøttelse
- Bitmap — kolonner med lav kardinalitet, analytiske forespørgsler
- Fuldtekst — tekstsøgning
- Sammensat — flere kolonner i ét indeks
Et indeks er en genvej. Det bytter skrivehastighed og lagerplads ud med læsehastighed. Brug det, hvor læsning betyder mest.
Comments (3)
Leave a comment