私はinnodbテーブルを持っています。テーブルのクエリは以下のようになります。MySQL Innodbは、間違った行見積りのためにインデックスを使用できません。
SELECT *
FROM x
WHERE now() BETWEEN a AND b
テーブル内の行の総数は700Kの周囲にいる間、私は上の複合インデックスを作成しました(a、b)は、クエリは約4K行を返します。
ただし、実行計画のEXPLAIN
を取得すると、クエリで期待されたインデックスが使用されていないことがわかりました。 rows
は360Kと推定されるため、実際の値よりも非常に大きくなります。
私はちょうど多くの記事(Why the rows returns by "explain" is not equal to count()?のような)が説明したように知っています、EXPLAIN
はおおよその見積もりを取得します。しかし、FORCE INDEX
ソリューションは非常に扱いにくく、今後、パフォーマンス上のリスクが生じる可能性があります。
MySQLをより正確な見積もりにする方法はありますか(現在のものは90倍です)。ありがとう。
いいえ、インデックスが役に立たないため、インデックスを使用できません。テーブルをスキャンする方が効率的です。 –