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

カーディナリティの低い2番目の列を持つ複合インデックスは、使用するのに十分なパフォーマンスに影響しますか?

    インデックス(単一列または複数列)を維持するためのコストは、ほとんどの場合、そのインデックスを使用した場合のパフォーマンスの向上よりも重要です。 INSERTごとに少しずつ増加します / DELETE 、さらにUPDATEを介してインデックス付きフィールドの値を変更する場合のコスト 。 (UPDATE ケースはまれです。)したがって、「複合インデックスの維持」のコストについて心配する必要はありません。

    WHERE `vehicles`.`type` IN ('Car')
      AND `vehicles`.`user_id` = 10
    

    INDEX(user_id, type)が必要です 。

    オプティマイザーは

    1. そのインデックスが候補となる可能性があることを発見します。
    2. いくつかの統計を確認してから
    3. インデックスを使用するか、カーディナリティが不十分であると判断して、テーブルをスキャンするだけです。

    インデックスを含めます。心配しないでください。

    (type, user_id)ではなく、そのようにフィールドを並べ替えました INに基づく 、これは、typeに複数の値がある場合があることを意味します 。

    テーブルのすべての行にtype = 'Car'がある場合 、 問題なし。私が言ったことはすべてまだ当てはまります。不要なtypeを含める無駄 重要ではありません。

    最初にすべての「=」列をインデックスに入れ、次に多くても1つの他のフィールドに入れることをお勧めします。 詳細についてはこちら




    1. レコードが存在しない場合にsum-または-0を選択するにはどうすればよいですか?

    2. マテリアライズドビューの更新:並行性、トランザクション動作

    3. MariaDBでのWEEK()のしくみ

    4. PHPがSQLインジェクションの試行を検出