隐式转换为什么导致索引失效
SELECT * FROM users WHERE id = '123';
这条语句失效的原因就是id是int类型的主键,比较的时候把id从int转化为字符串来比较了,而字符串的比较规则和int的比较规则明显不同,字符串是字典序比较的,还涉及到数据的长度,那为什么是id从int 转为字符串,而不是字符串转化为int呢,这是因为int转为字符串是1对1的转换,比如10只能转化为’10’,而’10‘、'10b’等都会转换为10,而且从字符串转换为int有风险,超出数据范围怎么办,所以只能int转string。其他索引失效的例子都是如此,例如Date类型和string。
解决方案就是避免不同类型的比较,避免使用隐式转换,用显示转换。