sql >> Database >  >> RDS >> Mysql

MySQL UITLEG:Index gebruiken versus indexvoorwaarde gebruiken

Een voorbeeld legt het het beste uit:

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

Deze zoekopdracht zou UITLEGGEN met 'Index gebruiken' omdat het helemaal niet nodig is , om de myUsedCarInventory-tabel zelf te "treffen", aangezien de "Make and Year"-index zijn behoefte "dekt" met betrekking tot de elementen van de WHERE-clausule die betrekking hebben op die tabel .

Stel je voor, we houden de vraag hetzelfde, maar voor de toevoeging van een voorwaarde aan de kleur

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

Deze zoekopdracht zou waarschijnlijk UITLEGGEN met 'Gebruik van indexvoorwaarde' (de 'waarschijnlijke', hier is voor het geval dat Toyota + jaar niet selectief genoeg zou worden geschat, en de optimizer zou kunnen besluiten om gewoon de tabel te scannen). Dit zou betekenen dat MySQL EERST gebruik de index om het Merk + Jaar op te lossen, en het zou ook de corresponderende rij in de tabel moeten opzoeken, alleen voor de rijen die voldoen aan de Merk + Jaar voorwaarden. Dat is wat soms wordt aangeduid als "push-down optimalisatie ".



  1. Hoe STRCMP() werkt in MariaDB

  2. MS-Access-recordset en klassenmodule

  3. Mysql:Selecteer alle gegevens tussen twee datums

  4. Selecteer query met IN() en zonder enige sortering