Saya percaya bahwa kueri yang Anda miliki mungkin cocok dengan sebagian besar data dalam tabel. Dalam situasi seperti ini, pengoptimal MySQL sering memilih untuk melakukan pemindaian tabel dan mengabaikan indeks sepenuhnya, karena sebenarnya lebih cepat daripada melalui kesulitan membaca tambahan seluruh indeks dan menggunakannya untuk memilih data. Jadi dalam hal ini, saya menduga bahwa public_private='yes' and approved='yes'
cocok dengan sebagian besar meja Anda. Oleh karena itu, jika MySQL melompat menggunakan indeks karena hal ini, maka itu juga tidak tersedia untuk pengurutan.
Jika Anda benar-benar ingin menggunakan indeks, maka solusinya adalah menggunakan FORCE INDEX
:
select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;
Namun, saya akan menjalankan beberapa tes untuk memastikan bahwa apa yang Anda dapatkan sebenarnya lebih cepat daripada apa yang telah dipilih oleh pengoptimal MySQL. Rupanya pengoptimal memang memiliki beberapa masalah dengan membuat pilihan untuk memesan, jadi Anda pasti bisa mencobanya dan melihat apakah performa Anda meningkat.