Indexordning är viktig när dina sökvillkor endast gäller DEL av indexet. Tänk på:
-
SELECT * FROM table WHERE first_name="john" AND last_name="doe"
-
SELECT * FROM table WHERE first_name="john"
-
SELECT * FROM table WHERE last_name="doe"
Om ditt index är (first_name
, last_name
) frågor 1 och 2 kommer att använda det, fråga 3 kommer inte att använda det. Om ditt index är (last_name
, first_name
) fråga 1 och 3 kommer att använda det, fråga #2 kommer inte att använda det. Att ändra villkorsordningen inom WHERE-satsen har ingen effekt i något av fallen.
Detaljer finns här
Uppdatera :
Om ovanstående inte är tydligt - MySQL kan bara använda ett index om kolumnerna i frågevillkoren bildar ett prefix längst till vänster i indexet. Fråga #2 ovan kan inte använda (last_name
, first_name
) index eftersom det bara är baserat på first_name
och first_name
är INTE prefixet längst till vänster för (last_name
, first_name
) index.
Ordningen på villkoren INOM frågan spelar ingen roll; fråga #1 ovan kommer att kunna använda (last_name
, first_name
) index bra eftersom dess villkor är first_name
och last_name
och tillsammans bildar de ett prefix längst till vänster för (last_name
, first_name
) index.