sql >> Database teknologi >  >> RDS >> Mysql

Er der en optimal metode til at bestille et MySQL sammensat indeks?

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.




  1. Søger efter flere numre i feltet med flere numre

  2. Hvordan kan jeg yderligere optimere en afledt tabelforespørgsel, som yder bedre end den JOINed-ækvivalent?

  3. Hvordan forbinder man to tabeller på et fremmednøglefelt ved hjælp af django ORM?

  4. PostgreSQL-fejl:Relationen eksisterer allerede