Вярвам, че заявката, която имате, вероятно съответства на голям процент от данните в таблицата. В ситуации като тази MySQL оптимизаторът често избира да направи сканиране на таблицата и да игнорира напълно индексите, тъй като всъщност е по-бързо, отколкото да премине през проблема с допълнителното четене на целия индекс и да го използва за избиране на данните. Така че в този случай предполагам, че public_private='yes' and approved='yes'
отговаря на добра част от вашата маса. Следователно, ако MySQL пропусне използването на индекса поради това, той също не е достъпен за сортиране.
Ако наистина искате да използва индекс, тогава решението би било да използвате FORCE INDEX
:
select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;
Въпреки това, бих пуснал някои тестове, за да се уверя, че това, което получавате, всъщност е по-бързо от това, което MySQL оптимизаторът е избрал да направи. Очевидно оптимизаторът има някои проблеми като правите избор за поръчка, така че определено бихте могли да опитате и да видите дали ще получите подобрена производителност.