MySQL对varchar字段使用int查询会发生什么?

谢谢光光的问题分享,享受排查问题找到答案的过程

  • 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;

对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。

小小的知识点,对以后遇到类似的问题可以有一个排查的思路。

猜你喜欢

转载自blog.csdn.net/hayre/article/details/109758115