Som en tumregel, i ett index med flera kolumner, vill du att de kolumner som har högst kardinalitet, eller med andra ord, det högsta antalet distinkta värden, ska komma först i indexet.
För att vara mer exakt vill du först ha kolumnen med så få möjliga matchningar som dina sökkriterier så att du kan begränsa resultatet så mycket som möjligt, men i allmänhet är det samma som högsta kardinalitet.
Så i ditt exempel vill du att kolumnen som kommer att ha miljontals distinkta värden ska finnas i indexet före den med endast 6 distinkta värden.
Om du antar att du bara väljer en rad av miljontals värden, låter det dig eliminera fler rader snabbare.
När du överväger två kolumner med liknande kardinalitet, sätt den mindre först (INTEGER
kolumner före VARCHAR
kolumner) eftersom MySQL kan jämföra och iterera över dem snabbare.
En varning är att om du väljer med intervall (t.ex. WHERE datecol > NOW()
), då vill du ha intervallkolumnerna längst till höger och dina kolumner med en enda konstant (t.ex. WHERE id = 1
) till vänster. Detta beror på att ditt index bara kan användas för att söka och beställa upp till punkten för det första intervallvärdet.