インデックス(単一列または複数列)を維持するためのコストは、ほとんどの場合、そのインデックスを使用した場合のパフォーマンスの向上よりも重要です。 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つの他のフィールドに入れることをお勧めします。 詳細についてはこちら 。