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

MySQL FORKLAR:Brug af indeks vs. Brug af indeksbetingelse

Et eksempel forklarer det bedst:

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

Denne forespørgsel vil FORKLARE med 'Brug af indeks', fordi den slet ikke behøver , for at "ramme" selve myUsedCarInventory-tabellen, da "Make and Year"-indekset "dækker" dets behov med hensyn til de elementer i WHERE-sætningen, der vedrører den tabel .

Forestil dig nu, at vi beholder forespørgslen den samme, men for tilføjelse af en betingelse på farven

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

Denne forespørgsel vil sandsynligvis FORKLARE med 'Brug af indekstilstand' (det 'sandsynlige', her er for tilfældet, at Toyota + år ikke ville blive estimeret til at være selektiv nok, og optimeringsværktøjet kan beslutte sig for bare at scanne tabellen). Dette ville betyde, at MySQL ville FØRST brug indekset til at løse mærket + år, og det ville også skulle slå den tilsvarende række i tabellen op, kun for de rækker, der opfylder betingelserne for mærke + år. Det er det, der nogle gange omtales som "skubbe optimering ned ".



  1. Oracle PLS-00363:udtryk '' kan ikke bruges som et tildelingsmål

  2. Hvordan kalder man oracle-lagret procedure, som inkluderer brugerdefineret type i java?

  3. Hvordan retter du en fejl i MySQL-forkert nøglefil, når du ikke kan reparere bordet?

  4. Sådan sikrer du Galera Cluster - 8 tips