Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Optimiere meine MySQL-Abfrage, um den Index zum Sortieren zu verwenden

Ich glaube, dass Ihre Abfrage wahrscheinlich mit einem großen Prozentsatz der Daten in der Tabelle übereinstimmt. In solchen Situationen entscheidet sich der MySQL-Optimierer oft dafür, einen Tabellenscan durchzuführen und Indizes vollständig zu ignorieren, da dies tatsächlich schneller ist, als sich die Mühe zu machen, den gesamten Index zusätzlich zu lesen und damit die Daten herauszusuchen. In diesem Fall vermute ich also, dass public_private='yes' and approved='yes' passt zu einem guten Teil Ihres Tisches. Wenn MySQL deshalb die Verwendung des Index überspringt, steht er daher auch nicht zum Sortieren zur Verfügung.

Wenn Sie wirklich wollen, dass es einen Index verwendet, dann wäre die Lösung, FORCE INDEX zu verwenden :

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

Ich würde jedoch einige Tests durchführen, um sicherzustellen, dass das, was Sie erhalten, tatsächlich schneller ist als das, was der MySQL-Optimierer ausgewählt hat. Anscheinend verwendet der Optimierer hat einige Probleme mit der Auswahl für die Bestellung, also könnten Sie es auf jeden Fall versuchen und sehen, ob Sie eine verbesserte Leistung erhalten.