Mysql
 sql >> Base de données >  >> RDS >> Mysql

Optimiser ma requête mysql pour utiliser l'index pour le tri

Je pense que la requête que vous avez correspond probablement à un grand pourcentage des données du tableau. Dans des situations comme celle-ci, l'optimiseur MySQL choisit souvent de faire une analyse de table et d'ignorer complètement les index, car c'est en fait plus rapide que de passer par la peine de lire l'intégralité de l'index et de l'utiliser pour sélectionner les données. Donc, dans ce cas, je suppose que public_private='yes' and approved='yes' correspond à une bonne partie de votre table. Par conséquent, si MySQL ignore l'utilisation de l'index à cause de cela, il n'est pas non plus disponible pour le tri.

Si vous voulez vraiment qu'il utilise un index, alors la solution serait d'utiliser FORCE INDEX :

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

Cependant, je ferais quelques tests pour m'assurer que ce que vous obtenez est réellement plus rapide que ce que l'optimiseur MySQL a choisi de faire. Apparemment l'optimiseur a quelques problèmes en faisant des sélections pour la commande, vous pouvez donc certainement essayer et voir si vous obtenez de meilleures performances.