Når jeg diskuterer indekser med flere kolonner, bruger jeg en analogi til en telefonbog. En telefonbog er dybest set et register over efternavn, derefter fornavn. Så sorteringsrækkefølgen bestemmes af, hvilken "kolonne" der er først. Søgninger falder i et par kategorier:
-
Hvis du slår folk op, hvis efternavn er Smith, kan du nemt finde dem, fordi bogen er sorteret efter efternavn.
-
Hvis du slår folk op, hvis fornavn er John, hjælper telefonbogen ikke, fordi Johns er spredt ud over bogen. Du skal scanne hele telefonbogen for at finde dem alle.
-
Hvis du slår folk op med et specifikt efternavn Smith og et specifikt fornavn John, hjælper bogen, fordi du finder Smiths sorteret sammen, og inden for den gruppe af Smiths findes Johns også i sorteret rækkefølge.
Hvis du havde en telefonbog sorteret efter fornavn og derefter efter efternavn, ville sorteringen af bogen hjælpe dig i ovenstående tilfælde #2 og #3, men ikke tilfælde #1.
Det forklarer eksempler på at slå nøjagtige værdier op, men hvad nu hvis du slår op efter værdiintervaller? Lad os sige, at du ville finde alle personer, hvis fornavn er John, og hvis efternavn begynder med 'S' (Smith, Saunders, Staunton, Sherman osv.). John'erne er sorteret under 'J' inden for hvert efternavn, men hvis du vil have alle Johns for alle efternavne, der starter med 'S', er Johns ikke grupperet sammen. De er spredt igen, så du ender med at skulle scanne alle navnene igennem med efternavn, der starter med 'S'. Hvorimod hvis telefonbogen var organiseret efter fornavn og derefter efter efternavn, ville du finde alle Johns sammen, så ville alle 'S' efternavne i Johns blive grupperet sammen.
Så rækkefølgen af kolonner i et indeks med flere kolonner har absolut betydning. Én type forespørgsel kan have brug for en bestemt kolonnerækkefølge for indekset. Hvis du har flere typer forespørgsler, skal du muligvis have flere indekser til at hjælpe dem med kolonner i forskellige rækkefølger.
Du kan læse min præsentation Sådan designer man virkelig indekser for mere information.