インデックス(単一列または複数列)を維持するためのコストは、ほとんどの場合、そのインデックスを使用した場合のパフォーマンスの向上よりも重要です。 INSERTごとに少しずつ増加します / DELETE 、さらにUPDATEを介してインデックス付きフィールドの値を変更する場合のコスト 。 (UPDATE ケースはまれです。)したがって、「複合インデックスの維持」のコストについて心配する必要はありません。
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
INDEX(user_id, type)が必要です 。
オプティマイザーは
- そのインデックスが候補となる可能性があることを発見します。
- いくつかの統計を確認してから
- インデックスを使用するか、カーディナリティが不十分であると判断して、テーブルをスキャンするだけです。
インデックスを含めます。心配しないでください。
(type, user_id)ではなく、そのようにフィールドを並べ替えました INに基づく 、これは、typeに複数の値がある場合があることを意味します 。
テーブルのすべての行にtype = 'Car'がある場合 、 問題なし。私が言ったことはすべてまだ当てはまります。不要なtypeを含める無駄 重要ではありません。
最初にすべての「=」列をインデックスに入れ、次に多くても1つの他のフィールドに入れることをお勧めします。 詳細についてはこちら 。