sql >> Databasteknik >  >> RDS >> Mysql

Finns det en optimal metod för att beställa ett MySQL-kompositindex?

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.




  1. Konvertera latin1-tecken på en UTF8-tabell till UTF8

  2. Omvänd sträng ord för ord med SQL

  3. Är det möjligt att ha en standardparameter för en lagrad mysql-procedur?

  4. Oracle PL/SQL:UTL_FILE.FCOPY Exempel