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.