Obecně platí, že ve vícesloupcovém indexu chcete, aby sloupce, které mají nejvyšší mohutnost, nebo jinými slovy, nejvyšší počet odlišných hodnot, byly v indexu na prvním místě.
Abychom byli přesnější, chcete nejprve sloupec s co nejmenším počtem shod s vašimi vyhledávacími kritérii, abyste mohli co nejvíce zúžit sadu výsledků, ale obecně je to stejné jako nejvyšší mohutnost.
Ve vašem příkladu tedy budete chtít, aby sloupec, který bude mít miliony různých hodnot, byl v indexu před sloupcem s pouze 6 odlišnými hodnotami.
Za předpokladu, že vybíráte pouze jeden řádek z milionů hodnot, umožňuje vám to rychleji odstranit více řádků.
Při zvažování dvou sloupců podobné mohutnosti dejte na první místo ten menší (INTEGER
sloupce před VARCHAR
sloupce), protože MySQL je může rychleji porovnávat a iterovat.
Jednou výhradou je, že pokud vybíráte s rozsahy (např. WHERE datecol > NOW()
), pak chcete, aby sloupce rozsahu byly nejvíce vpravo a vaše sloupce s jednou konstantou (např. WHERE id = 1
) doleva. Důvodem je, že váš index lze použít pouze pro vyhledávání a řazení až do bodu první hodnoty rozsahu.