sql >> Databasteknik >  >> RDS >> Mysql

utförande beställning av nycklar i ett MySQL-sammansatt index (WRT Rails Polymorphic Associations och STI)

Från min egen forskning (men jag är ingen expert på DBA) har jag lärt mig att det finns två saker att tänka på när man bestämmer ordningen för ett sammansatt nyckelindex.

För det första, när det gäller kolumnernas kardinalitet, är index i allmänhet bättre på att söka efter kolumner med hög kardinalitet. Så jag skulle vara benägen att placera kolumnen med den högsta kardinaliteten först i indexet. Som referens finns det en artikel med titeln MySQL Query Optimization som säger:

I ditt fall, _id kolumner skulle helt klart passa bättre den definitionen, så de är en bättre kandidat för att vara ett prefix för nyckeln.

En annan sak att tänka på är återanvändbarheten av dessa index. De flesta (om inte alla) databassystem tillåter att ett prefix för en sammansatt nyckel återanvänds. Till exempel en sammansatt nyckel på (owner_id, owner_type) kan också användas av frågor på owner_id men inte på owner_type .

Så utifrån det du förklarade i din fråga kanske du är bättre ställd med två index:ett sammansatt nyckelindex på (owner_id, owner_type) och en annan på (owner_type) .

Slutligen handlar det verkligen om din datauppsättning och dina frågor. Prova flera scenarier, riktmärken med olika sammansatta nyckelordningar för att se vad som är den mest optimala lösningen. Glöm inte heller att index medför en skrivstraff på dina tabeller.

Uppdatera :Det finns också en annan ganska populär SO-fråga om sammansatt nyckelindex där:

När ska jag använda ett sammansatt index?



  1. MySQL - radnummer i rekorduppsättning?

  2. Ändra alla tabeller i databasen

  3. mysql varaktighet och hämtningstid

  4. Få Prevision Nästa post i EN RAD