谢谢光光的问题分享,享受排查问题找到答案的过程
- MySQL会对varchar字段的数据进行int的转型
- 索引会失效
- 查询即将变得很慢
- 不仅仅是这样的类型会转换,当类型匹配不上的时候MySQL将会替我们做一次类型转换,比如之前用varchar的类型去查询datatime,MySQL就是帮我们做了一次类型转换才得以查询
这篇文章写得很好https://blog.csdn.net/u010825931/article/details/103811797
假设t_test表中的no是varchar类型的,那么
SQL1:SELECT * FROM t_test t1 where t1.no = 1;
SQL2:SELECT * FROM t_test t1 where t1.no = '1';
两个查询是不同的,SQL1的查询实际跟以下查询语句是相同的
SQL1:SELECT * FROM t_test t1 where CAST(t1.no AS signed int) = 1;
对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。
小小的知识点,对以后遇到类似的问题可以有一个排查的思路。