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;

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

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值