sql >> Databasteknik >  >> RDS >> Mysql

MySQL FÖRKLARA:Använda index vs. Använda indexvillkor

Ett exempel förklarar det bäst:

SELECT Year, Make --- possibly more fields and/or from extra tables
FROM myUsedCarInventory
WHERE Make = 'Toyota' AND Year > '2006'

Assuming the Available indexes are:
  CarId
  VIN
  Make
  Make and Year

Den här frågan skulle FÖRKLARA med "Använda index" eftersom den inte behöver alls , för att "träffa" själva tabellen myUsedCarInventory eftersom "Make and Year"-indexet "täcker" dess behov med avseende på elementen i WHERE-satsen som hänför sig till den tabellen .

Föreställ dig nu, vi behåller frågan densamma, men för att lägga till ett villkor på färgen

...
WHERE Make = 'Toyota' AND Year > '2006' AND Color = 'Red'

Den här frågan skulle sannolikt FÖRKLARA med "Användning av indexvillkor" (det "sannolika", här är för fallet att Toyota + år inte skulle uppskattas vara tillräckligt selektivt, och optimeraren kan besluta att bara skanna tabellen). Detta skulle innebära att MySQL skulle FÖRST använd indexet för att lösa Make + Year, och det måste också slå upp motsvarande rad i tabellen, endast för raderna som uppfyller villkoren för märke + år. Det är det som ibland kallas "tryck ned optimering ".



  1. PostgreSQL - inaktiverar begränsningar

  2. Stöder MySQL historiskt datum (som 1200)?

  3. Skillnad mellan tabellfunktion och rörledningsfunktion?

  4. Ställa in sessionens tidszon med spring jdbc oracle