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

MySQLが比較よりも大きいインデックスを使用しないのはなぜですか?

    おそらく、MySqlにクエリプランを決定させるほうがよいでしょう。インデックススキャンを実行すると、全表スキャンよりも効率が低下する可能性があります。

    このテーブルのディスクには2つのデータ構造があります

    1. テーブル自体。および
    2. 主キーのBツリーインデックス。

    クエリを実行する場合、オプティマイザにはデータへのアクセス方法に関する2つのオプションがあります。

    SELECT * FROM userapplication WHERE application_id > 1025;

    インデックスの使用

    1. Bツリーインデックスをスキャンして、application_id > 1025であるすべての行のアドレスを見つけます
    2. 表の適切なページを読んで、これらの行のデータを取得します。

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

    テーブル全体をスキャンして、適切なレコードを選択します。

    最適な戦略の選択

    クエリオプティマイザの仕事は、必要なデータを取得するための最も効率的な戦略を選択することです。 application_id > 1025の行がたくさんある場合 その場合、実際にはインデックスを使用する効率が低下する可能性があります。たとえば、レコードの90%にapplication_id > 1025がある場合 次に、クエリオプティマイザは、bツリーインデックスのリーフノードの約90%をスキャンしてから、テーブルの少なくとも90%を読み取って、実際のデータを取得する必要があります。これには、テーブルをスキャンするだけでなく、ディスクからより多くのデータを読み取ることが含まれます。



    1. タイプによって違反された継承セキュリティルール:'MySql.Data.Entity.MySqlEFConfiguration'

    2. テーブルが空の場合はINSERTを実行しますか?

    3. SqlServerSpatial.dllを読み込めません

    4. プランエクスプローラーでプランの詳細をネイティブに匿名化します