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

MySqlはインデックスの使用を拒否します

    MySQLは、テーブルのかなり大きな部分を選択すると推定した場合、インデックスを使用しません。そのような場合、テーブルスキャンの方が実際にはより効率的であると考えます。

    類推すると、これが本の索引に「the」のような非常に一般的な単語が含まれていない理由です。索引で単語を検索してページ番号のリストを見つけるのは時間の無駄になるためです。非常に長いリスト、本のすべてのページですら。単に本の表紙を読んでカバーする方が効率的です。

    私の経験では、これはMySQLでクエリの検索条件がテーブルの20%以上に一致する場合に発生し、これは通常、正しいクロスオーバーポイントです。データ型、テーブルのサイズなどに基づいて、いくつかのバリエーションがある可能性があります。

    MySQLにヒントを与えて、テーブルスキャンは非常にコストがかかるため、インデックスを使用する可能性がはるかに高くなることを納得させることができます。これは通常は必要ありませんが、次のように行うことができます:

    SELECT taskid FROM tasktransitions FORCE INDEX (transitiondate_ix)
    WHERE transitiondate>'2013-09-31 00:00:00';
    


    1. 最新のMicrosoftAccess機能に興味がありますか?

    2. PHP、MYSQLi、PDOで複数のデータベースを接続する方法

    3. Oracleでテーブル構造を変更するにはどうすればよいですか?

    4. MySQLでDECIMALにキャスト