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

パフォーマンスを向上させるために何にインデックスを付ける必要がありますか?

    一般に、選択フィルターはuser_idのインデックスを使用できます またはactivity_type_id または両方(いずれかの順序で)。

    注文操作では、created_atでフィルターを使用できる場合があります 。

    このクエリでは、(user_id, activity_type_id)の複合インデックスである可能性があります。 MySQLが実際にそれを利用できると仮定すると、最良の結果が得られます。それができない場合は、user_idにインデックスを付ける方がよいでしょう。 activity_type_idより 選択性が向上する可能性が高いためです。それを考える理由の1つは、activity_type_idのインデックスを使用する場合、スキャンするインデックスのサブセクションが4つあるということです。 、user_idのインデックスを使用する場合にスキャンする1つのサブセクションと比較 一人で。

    ソート順のインデックスに依存しようとすると、全表スキャンを意味する可能性が高いため、有益である可能性は低くなります。 created_atにインデックスを作成しません このクエリをサポートするため。有益な他のクエリがあるかもしれません。



    1. oratop

    2. 複数の行を更新するmysql

    3. ここで、rownum=1クエリはOracleで時間がかかります

    4. 関数内のテーブルに値を挿入するとエラーが発生しますが、関数外のテーブルに値を挿入しようとすると正常に機能します