索引失效的条件其中有隐式转换会导致索引失效,但是实际使用中发现有时并没有失效。比如主键是long类型,select * from xxx where id = '123',传参是字符串,mysql会将字符串准换成long但是依然会使用到索引。还有or条件查询的时候当所有的条件都建立了索引的时候索引也不会失效。
我们可以使用explain来验证一下
当索引是long类型
EXPLAIN SELECT * from t_accident where id = 202202100001
EXPLAIN SELECT * from t_accident where id = '202202100001'
所以当索引是数字类型的时候,传入字符串并不会失效,但是反过来就会失效
当索引是varchar
EXPLAIN SELECT * from t_accident where report_phone = 15214337054
key是null
EXPLAIN SELECT * from t_accident where report_phone = '15214337054'
or索引失效(report_phone 有索引,accident_type 无索引)
EXPLAIN SELECT * from t_accident where report_phone = '15214337054' or accident_type = '1'
or索引不失效
EXPLAIN SELECT * from t_accident where report_phone = '15214337054' or id = 202202100001