同じ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」に変更します。
一般的なアドバイス:捏造されたデータに対して実行されるベンチマークに注意してください。