約300万件のレコードがある単純なテーブルがあります。必要なインデックスを作成しました。インデックスPRIMARYも強制しますが、それでも機能しません。インデックスを使用してこの行を実行する代わりに、ほぼすべての300万行を検索します(record_idはINT自動インクリメントです)。
EXPLAIN SELECT record_id
FROM myrecords
FORCE INDEX (
PRIMARY )
ORDER BY record_id ASC
LIMIT 2955900 , 300
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE myrecords index NULL PRIMARY 4 NULL 2956200 Using index
インデックスは
Keyname Type Unique Packed Column Cardinality Collation Null
PRIMARY BTREE Yes No record_id 2956742 A No
このFORCEDインデックスが正しく使用されていない理由を知りたいです。
ASCとDESCの両方が試行されたインデックス「プライマリ」を強制しない場合、結果は同じです。テーブルが修復され、最適化され、分析されました。運がない。
クエリの実行には1分以上かかります。
私が期待したこと:その列はインデックス付けされているので、クエリは300行だけを処理する必要があります。最初のコード形式のブロックでわかるように、それらのほぼすべてが300万ではありません(少し右にスクロールします)