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

インデックスを使用しないIN句

    手足に出て、MyISAMエンジンを使用しているからだと言います。

    この Answer に見られるように、INNODBでは完全に正常に機能しています。 私の。

    私はこの問題について少なくとも1つの名誉ある言及を呼び起こすように努めます。

    ここで、範囲結合タイプ 、デフォルトのエンジンであるため、明らかにINNODBフォーカスです。また、一部のドキュメント階層のマニュアルで明示的に言及されていない場合は、それが想定されます。

    私のサンプルリンクには、IDについて隣接するものは何もないことに注意してください。つまり、type=rangeに過集中しないでください EXPLAIN出力で。速度はオプティマイザー(CBO)を介して到達します。

    cardinality 私の例では非常に高いです(430万)。ターゲットIDカウントは比較的少ない(1000)。インデックスが使用されます。

    状況は逆の場合があります。カーディナリティが3のように非常に低く、オプティマイザがインデックスの使用を中止することを決定する場合があります。

    インデックスを確認するにはcardinality 、マニュアルページSHOWINDEX構文 を参照してください。 。

    次のような簡単な呼び出し:

    show index from ratings;
    
    +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | ratings |          0 | PRIMARY  |            1 | id          | A         |     4313544 |     NULL | NULL   |      | BTREE      |         |               |
    +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    


    1. Oracleで自動インクリメント主キーを定義する方法

    2. 未定義の関数oci_connect()の呼び出し

    3. PDOに何かが存在するかどうかを確認するための最良の方法は何ですか

    4. PostgreSQLでのテキスト圧縮