sql >> データベース >  >> RDS >> Mysql

ソートにインデックスを使用するようにmysqlクエリを最適化する

    あなたが持っているクエリは、おそらくテーブル内のデータの大部分と一致していると思います。このような状況では、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オプティマイザーが選択したものよりも実際に高速であることを確認します。どうやらオプティマイザーいくつかの問題があります 注文の選択を行うことで、間違いなくこれを試して、パフォーマンスが向上するかどうかを確認できます。



    1. HibernateからSHOWWARNINGSを無効にするにはどうすればよいですか?

    2. MYSQL_ROOT_PASSWORDは設定されていますが、Dockerコンテナのユーザー'root' @'localhost'(パスワード:YESを使用)のアクセスが拒否されています

    3. Mysqlチェーン選択クエリ

    4. 複数の日時値の合計を取得するにはどうすればよいですか?