MySQL用字符串查整形_MySQL整形数字和字符串数字的索引使用情况

问题概述

今天在上班时,DBA突然找出来一段sql,说造成主从服务器延迟过大。经过查看是一个根据主键更新的语句,重新执行这句sql,执行了将近10秒钟,很是吃惊,通过排查发现是主键类型varchar的字段, 我们使用条件传入了数值型的值,导致没有经过索引。

问题重现

我们准备了两个表,一个表的主键是varchar类型,一个表的主键是int类型,分别执行以下语句:

1.表1的主键类型为varchar,分别执行如下两条语句:

SELECT * FROM table1 WHERE reportId = 1152921504880208203;

SELECT * FROM table1 WHERE reportId = '1152921504880208203';

通过explain发现第一条sql没有使用索引,第二条sql使用索引,这两条语句的差异就是第二条语句我们给数值加上了引号,加上引号后,就使用了索引。

2.表2的主键类型是int,也分别执行这两条语句:

SELECT * FROM table2 WHERE reportId = 1152921504880208203;

SELECT * FROM table2 WHERE reportId = '1152921504880208203';​​​​​​​

通过explain发现这两条sql都使用了索引。

结论

当我们使用的字段是数值类型时,加引号或者不加引号(sql中单引号和双引号实现相同效果)都不影响索引的使用

当我们的字段是字符串类型时,不加引号的查询无法使用索引,加引号的查询才可正常使用索引

​​​​​​​

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值