Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Indizes und -Reihenfolge

Die Indexreihenfolge spielt eine Rolle, wenn Ihre Abfragebedingungen nur für PART gelten des Indexes. Bedenken Sie:

  1. SELECT * FROM table WHERE first_name="john" AND last_name="doe"

  2. SELECT * FROM table WHERE first_name="john"

  3. 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.