あなたが持っているクエリは、おそらくテーブル内のデータの大部分と一致していると思います。このような状況では、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オプティマイザーが選択したものよりも実際に高速であることを確認します。どうやらオプティマイザー