sql >> Database teknologi >  >> RDS >> Mysql

MySQL-indekser og rækkefølge

Indeksrækkefølgen er vigtig, når dine forespørgselsbetingelser kun gælder for DEL af indekset. Overvej:

  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"

Hvis dit indeks er (first_name , last_name ) forespørgsler 1 og 2 vil bruge det, forespørgsel #3 vil ikke. Hvis dit indeks er (last_name , first_name ) forespørgsel 1 og 3 vil bruge det, forespørgsel #2 vil ikke. Ændring af betingelsesrækkefølgen inden for WHERE-sætningen har ingen effekt i begge tilfælde.

Detaljer er her

Opdater :
I tilfælde af at ovenstående ikke er klart - MySQL kan kun bruge et indeks, hvis kolonnerne i forespørgselsbetingelser danner et præfiks længst til venstre for indekset. Forespørgsel #2 ovenfor kan ikke bruge (last_name , first_name ) indeks, fordi det kun er baseret på first_name og first_name er IKKE præfikset længst til venstre for (last_name , first_name ) indeks.

Rækkefølgen af ​​betingelser INDEN FOR forespørgslen er ligegyldig; forespørgsel #1 ovenfor vil kunne bruge (last_name , first_name ) indeks helt fint, fordi dets betingelser er first_name og last_name og tilsammen danner de et præfiks længst til venstre for (last_name , first_name ) indeks.



  1. Konverter månedsnummer til månedsnavnfunktion i SQL

  2. Føj en række til flere rækker i en anden tabel

  3. Oracle - ORA-06502:PL/SQL:numerisk eller værdifejl (DBMS_OUTPUT)

  4. Henter MySQL med Kivy