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

インデックス作成後のMySQLクエリは遅くなります

    同じpriceの行がたくさんあるのは現実的ですか ?クエリから444K行を返すのは現実的ですか?クエリの最適化は「通常の」データに基づいているため、これらを尋ねます。

    インデックス(例:INDEX(price)priceを探すときに便利です それは数回発生します。実際、オプティマイザーは、検索対象の値が約20%以上の確率で発生していることを確認すると、インデックスを回避します。代わりに、インデックスを無視して最初にテストしたことを実行します。一致しない行を無視して、テーブル全体をスキャンするだけです。

    行うことでそれを見ることができるはずです

    EXPLAIN select * from books where price = 10
    

    インデックスありとなし。または、次のことを試すこともできます:

    EXPLAIN select * from books IGNORE INDEX(books_price_index) where price = 10
    EXPLAIN select * from books FORCE INDEX(books_price_index) where price = 10
    

    しかし...オプティマイザーはインデックスを無視しなかったようです。 priceの「カーディナリティ」がわかります は「1」です。これは、その列に1つの異なる値しかないことを意味します。この「統計」は正しくないか、誤解を招く可能性があります。これを実行して、変更点を確認してください:

    ANALYZE TABLE books;
    

    これにより、いくつかのランダムプローブを介して統計が再計算され、 その「1」をおそらく「2」に変更します。

    一般的なアドバイス:捏造されたデータに対して実行されるベンチマークに注意してください。



    1. DBテストデータを生成する方法

    2. mysql ...inwhere句があいまいです

    3. SpringBootでPostgres接続が閉じられましたエラー

    4. PHP-ログインシステムでメンバー専用ページを保護する