Zasadniczo w indeksie wielokolumnowym chcesz, aby kolumny o największej kardynalności, czyli innymi słowy, o największej liczbie odrębnych wartości, znajdowały się na pierwszym miejscu w indeksie.
Aby być bardziej dokładnym, najpierw chcesz kolumnę z najmniejszą możliwą liczbą dopasowań do kryteriów wyszukiwania, aby móc maksymalnie zawęzić zestaw wyników, ale ogólnie jest to to samo, co najwyższa kardynalność.
Tak więc w twoim przykładzie chcesz, aby kolumna, która będzie zawierała miliony odrębnych wartości, znajdowała się w indeksie przed kolumną z tylko 6 różnymi wartościami.
Zakładając, że wybierasz tylko jeden wiersz z milionów wartości, pozwala to szybciej wyeliminować więcej wierszy.
Rozważając dwie kolumny o podobnej kardynalności, umieść mniejszą jako pierwszą (INTEGER
kolumny przed VARCHAR
kolumn), ponieważ MySQL może je porównywać i iterować szybciej.
Jedynym zastrzeżeniem jest to, że jeśli wybierasz z zakresami (np. WHERE datecol > NOW()
), wtedy chcesz, aby kolumny zakresu znajdowały się najdalej po prawej stronie, a kolumny z pojedynczą stałą (np. WHERE id = 1
) w lewo. Dzieje się tak, ponieważ Twój indeks może być używany tylko do wyszukiwania i porządkowania do punktu pierwszej wartości zakresu.