1、场景
线上跑了一个慢sql,查看表结构,表里面有order_no的唯一索引

2、举例
库里有一张表,有字段order_no(varchar),final_amount(decinal):




使用:explain select * from orders where final_amount > 1000

使用: explain select * from orders where final_amount > '1000'

3、总结
当字段等号两侧类型不一致,会发生隐式转换,cast(index_filed as signed),然后和字段对比。当字段varchar时,我们查询20190324030381,字段varchar转化为int,再与20190324030381比较,那么库里'20190324030381','a20190324030381','20190324030381a' 均可转化成20190324030381,那么表就无法使用索引,只能全表转化检索。对于int型,发生隐性转化时,有int转化为varchar,1000只会转化成'1000',所以可以走索引。
4、拓展
延伸的拓展验证了dateTime,使用:explain select * from orders where complete_at > '2020-05-25'




越知道你就越不知道,技术有限,理解有限,欢迎指正~