关于mybatis的#{}和mysql索引的优化的一些问题

没有检索到摘要

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mybatis的#{}的误解

一般百度搜索#{}和${}的区别都是如以下一样千篇一律的答案(当然,也不是说错了):
在这里插入图片描述
这里仅针对第二点做一些说明:
#{}会对传递来的参数加上单引号是没错的,但是有个前提,得是字符串
比如传递的是一个String类型:
在这里插入图片描述
可以看到是有单引号的

integer类型:
在这里插入图片描述

到这里可能你会问,有什么关系吗?反正都可以查出来

一般来说,仅仅查询的话确实没问题,如果你传个数值类型的mysql会自动帮你类型转换

但是一旦你要走索引就要注意了,如果你的表字段类型为varchar类型的,而你又将参以数值的形式传进来的话,就不会使用该索引。
举个例子,register_time 是varchar类型

 SELECT * FROM member_register
    WHERE register_time >= 1634400000000
    AND register_time <= 1636991999999

这样写的话,是走不上register_time这个索引的,会触发类型转换,因为后面1634400000000是int类型的,优先级比register_time (varchar)类型高

对于索引的一些问题

我之前一直以为只要对数据量大的表加索引就行了,小数据量的表我才不care
但是被啪啪啪打脸了。。。
至于为什么?俺也不知道,先学着吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值