Som en tommelfingerregel, i et indeks med flere kolonner, ønsker du, at de kolonner, der har den højeste kardinalitet, eller med andre ord, det højeste antal distinkte værdier, skal komme først i indekset.
For at være mere præcis vil du først have kolonnen med færrest mulige matches til dine søgekriterier, så du kan indsnævre resultatet så meget som muligt, men generelt er det det samme som den højeste kardinalitet.
Så i dit eksempel vil du have, at kolonnen, der vil have millioner af forskellige værdier, skal være i indekset før den med kun 6 forskellige værdier.
Hvis du antager, at du kun vælger én række ud af de millioner af værdier, giver det dig mulighed for at fjerne flere rækker hurtigere.
Når du overvejer to kolonner med lignende kardinalitet, skal du sætte den mindste først (INTEGER
kolonner før VARCHAR
kolonner), fordi MySQL kan sammenligne og iterere over dem hurtigere.
En advarsel er, at hvis du vælger med intervaller (f.eks. WHERE datecol > NOW()
), så vil du have områdekolonnerne længst til højre og dine kolonner med en enkelt konstant (f.eks. WHERE id = 1
) til venstre. Dette skyldes, at dit indeks kun kan bruges til at søge og bestille op til punktet for den første intervalværdi.