Ik denk dat de zoekopdracht die u heeft waarschijnlijk overeenkomt met een groot percentage van de gegevens in de tabel. In situaties zoals deze kiest de MySQL-optimizer er vaak voor om een tabelscan uit te voeren en indexen volledig te negeren, omdat het eigenlijk sneller is dan de moeite nemen om de hele index extra te lezen en deze te gebruiken om de gegevens eruit te pikken. Dus in dit geval vermoed ik dat public_private='yes' and approved='yes'
past bij een groot deel van uw tafel. Daarom, als MySQL het gebruik van de index hierdoor overslaat, is het ook niet beschikbaar om te sorteren.
Als je echt wilt dat het een index gebruikt, dan zou de oplossing zijn om FORCE INDEX
te gebruiken. :
select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;
Ik zou echter een aantal tests uitvoeren om er zeker van te zijn dat wat je krijgt echt sneller is dan wat de MySQL-optimizer heeft gekozen. Blijkbaar is de optimizer heeft wel wat problemen met het maken van selecties voor het bestellen, dus je zou dit zeker een kans kunnen geven en kijken of je betere prestaties krijgt.