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

Optimering af min mysql-forespørgsel til at bruge indeks til sortering

Jeg tror, ​​at den forespørgsel, du har, sandsynligvis matcher en stor procentdel af dataene i tabellen. I situationer som denne vælger MySQL optimizeren ofte at lave en tabelscanning og ignorere indeks fuldstændigt, da det faktisk er hurtigere end at gå igennem besværet med den ekstra læsning af hele indekset og bruge det til at udvælge dataene. Så i dette tilfælde gætter jeg på, at public_private='yes' and approved='yes' matcher en god del af dit bord. Derfor, hvis MySQL springer over at bruge indekset på grund af dette, så er det heller ikke tilgængeligt til sortering.

Hvis du virkelig vil have det til at bruge et indeks, så ville løsningen være at bruge FORCE INDEX :

select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;

Jeg ville dog køre nogle tests for at sikre mig, at det, du får, faktisk er hurtigere, end hvad MySQL-optimeringsværktøjet har valgt at gøre. Tilsyneladende optimeringsværktøjet har nogle problemer med at foretage valg til bestilling, så du kan helt sikkert prøve dette og se, om du får forbedret ydeevne.



  1. mySQL:Underforespørgsel til array?

  2. Vælg de tidligste og seneste datoer

  3. Ukendt kolonnefejl i denne COUNT MySQL-sætning?

  4. Accent- og store og små bogstaver i Oracle med LIKE