Die Indexreihenfolge spielt eine Rolle, wenn Ihre Abfragebedingungen nur für PART gelten des Indexes. Bedenken Sie:
-
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"
Wenn Ihr Index (first_name
, last_name
) Abfragen 1 und 2 verwenden es, Abfrage Nr. 3 nicht. Wenn Ihr Index (last_name
, first_name
) Abfragen 1 und 3 verwenden es, Abfrage #2 nicht. Das Ändern der Bedingungsreihenfolge innerhalb der WHERE-Klausel hat in beiden Fällen keine Auswirkung.
Einzelheiten finden Sie hier
Aktualisieren :
Falls das obige nicht klar ist - MySQL kann einen Index nur verwenden, wenn die Spalten in den Abfragebedingungen ein ganz linkes Präfix des Index bilden. Abfrage Nr. 2 oben kann (last_name
) nicht verwenden , first_name
) Index, weil er nur auf first_name
basiert und first_name
ist NICHT das äußerst linke Präfix von (last_name
, first_name
)-Index.
Die Reihenfolge der Bedingungen INNERHALB der Abfrage spielt keine Rolle; Abfrage Nr. 1 oben kann (last_name
, first_name
) Index ganz gut, weil seine Bedingungen first_name
sind und last_name
und zusammengenommen bilden sie ein äußerst linkes Präfix von (last_name
, first_name
)-Index.