sql >> Database >  >> RDS >> Mysql

MySQL-indexen en volgorde

Indexvolgorde is van belang wanneer uw vraagvoorwaarden alleen van toepassing zijn op PART van de index. Overweeg:

  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"

Als uw index is (first_name , last_name ) query's 1 en 2 zullen het gebruiken, query #3 niet. Als uw index (last_name is) , first_name ) query 1 en 3 zullen het gebruiken, query #2 niet. Het wijzigen van de conditievolgorde binnen de WHERE-clausule heeft in beide gevallen geen effect.

Details zijn hier

Bijwerken :
In het geval dat het bovenstaande niet duidelijk is - MySQL kan alleen een index gebruiken als de kolommen in de queryvoorwaarden een meest linkse prefix van de index vormen. Query #2 hierboven kan niet worden gebruikt (last_name , first_name ) index omdat deze alleen is gebaseerd op first_name en first_name is NIET het meest linkse voorvoegsel van de (last_name , first_name ) index.

De volgorde van de voorwaarden BINNEN de query doet er niet toe; query #1 hierboven kan gebruiken (last_name , first_name ) index prima omdat de voorwaarden zijn first_name en last_name en samen vormen ze WEL het meest linkse voorvoegsel van (last_name , first_name ) index.



  1. Gegevensmodel voor huwelijksorganisatie

  2. Hiërarchische tagging in SQL

  3. Deel 1:Beeldclassificatie met MariaDB Server en TensorFlow - een overzicht

  4. Is substr of LIKE sneller in Oracle?