sql >> Databasteknik >  >> RDS >> Mysql

MySQL-index och ordning

Indexordning är viktig när dina sökvillkor endast gäller DEL av indexet. Tänk på:

  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"

Om ditt index är (first_name , last_name ) frågor 1 och 2 kommer att använda det, fråga 3 kommer inte att använda det. Om ditt index är (last_name , first_name ) fråga 1 och 3 kommer att använda det, fråga #2 kommer inte att använda det. Att ändra villkorsordningen inom WHERE-satsen har ingen effekt i något av fallen.

Detaljer finns här

Uppdatera :
Om ovanstående inte är tydligt - MySQL kan bara använda ett index om kolumnerna i frågevillkoren bildar ett prefix längst till vänster i indexet. Fråga #2 ovan kan inte använda (last_name , first_name ) index eftersom det bara är baserat på first_name och first_name är INTE prefixet längst till vänster för (last_name , first_name ) index.

Ordningen på villkoren INOM frågan spelar ingen roll; fråga #1 ovan kommer att kunna använda (last_name , first_name ) index bra eftersom dess villkor är first_name och last_name och tillsammans bildar de ett prefix längst till vänster för (last_name , first_name ) index.



  1. psql-klienten kan vara ett schackbräde nu...

  2. TSQL - Lägg till kolumn i alla tabeller i en databas [ Markörexempel]

  3. Oracle-certifieringar

  4. Hur kan jag manipulera MySQL fulltext sökrelevans för att göra ett fält mer "värdefullt" än ett annat?