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

MySQL-indekset bremser forespørgslen

Det ser ud til, at artikel_id er den primære nøgle til artikeltabellen.

Da du grupperer efter article_id, skal MySQL returnere posterne i rækkefølge efter den kolonne for at udføre GROUP BY.

Du kan se, at uden indekset scanner den alle poster i artikeltabellen, men de er i det mindste i rækkefølge efter artikel_id, så der kræves ingen senere sortering. LIMIT-optimeringen kan anvendes her, da den allerede er i orden, den kan bare stoppe, når den har fået fem rækker.

I forespørgslen med indekset på tag.name, i stedet for at scanne hele artiklertabellen, bruger den indekset, men mod tag-tabellen, og starter der. Desværre, når du gør dette, skal posterne senere sorteres efter article.article_id for at fuldføre GROUP BY-klausulen. LIMIT-optimeringen kan ikke anvendes, da den skal returnere hele resultatsættet og derefter bestille det for at få de første 5 rækker.

I dette tilfælde gætter MySQL bare forkert.

Uden LIMIT-klausulen gætter jeg på, at brugen af ​​indekset er hurtigere, hvilket måske var, hvad MySQL gættede på.



  1. Hvorfor gik min MySQL-database ned? Få indsigt med den nye MySQL Freeze Frame

  2. XAMPP/MySQL:kunne ikke åbne single-table tablespace-filen .\mysql\innodb_index_stats.ibd efter genstart af MySQL

  3. mysql - jeg slettede brugertabellen! hvordan kan jeg gendanne det?

  4. MySQL - sorter kommasepareret streng i kolonne