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

MySQL:Hvorfor ændrer 5. ID i IN-klausulen drastisk forespørgselsplanen?

Som du har vist, har MySQL to alternative forespørgselsplaner for forespørgsler med ORDER BY ... LIMIT n :

  1. Læs alle kvalificerende rækker, sorter dem, og vælg n øverste rækker.
  2. Læs rækkerne i sorteret rækkefølge, og stop når n kvalificerende rækker er blevet fundet.

For at afgøre, hvilken der er den bedste mulighed, skal optimeringsværktøjet estimere filtreringseffekten af ​​din WHERE-tilstand. Dette er ikke ligetil, især for kolonner, der ikke er indekseret, eller for kolonner, hvor værdier er korrelerede. I dit tilfælde skal man nok læse meget mere af tabellen i sorteret rækkefølge for at finde de første 25 kvalificerende rækker, end hvad optimizeren forventede.

Der er sket flere forbedringer i, hvordan LIMIT-forespørgsler håndteres, både i senere udgivelser af 5.6 (du kører på en pre-GA-udgivelse!) og i nyere udgivelser (5.7, 8.0). Jeg foreslår, at du prøver at opgradere til en senere udgivelse og se, om dette stadig er et problem.

Generelt, hvis du ønsker at forstå beslutninger om forespørgselsplanlægning, bør du se på optimeringssporingen for forespørgslen.



  1. Hvordan tilføjer man en ny kolonne i en tabel efter 2. eller 3. kolonne i tabellen ved hjælp af postgres?

  2. SQL-fejl 1406 Data for lange til kolonne

  3. Filtrere efter COUNT(*)?

  4. Gem billede til database blob; hent fra db til Picturebox