明明有个索引“感觉”应该被选中,EXPLAIN时在possible_keys也有它,但最后没被选中,可能的原因有哪些? 一、执行计划如下: desc select * from t1 where c2 >= 2; key: NULL key_len: NULL rows: 14 filtered: 92.86 Extra: Using where 二、可能的原因如下: 隐式转换。 表碎片,因为表的碎片率过高。 根据索引读取到的数据在整个表中的数据占比超过30%。 统计信息没有及时更新。 三、上述执行计划的结果是: 预计扫描的行数为14行,filtered(是指返回结果的行占需要读到的行的百分比)的值为92%。 当前执行计划中filtered值92% 说明根据索引查询获取的结果占整张表的92%,在MySQL中根据索引查询的结果占整张表的数据30%则不会走索,所以不会走索引。 另外,也有可能是表的碎片率过高或隐式转换导致的。