问题现象:在进行接口性能测试时,发现一个查询详情的接口反应速度在10s左右,日志打印定位到一条sql执行执行很慢,于是将sql复制到终端执行,执行速度100ms左右。
使用数据库:pgsql,数据量100w
示例代码:
select * from table_a a join table_b b on a.project_no = b.project_no and a.id = #{id}
解决方案:①将#替换为$,使用此方法可能导致sql注入
②将mapper层查询方法入参从String类型更改为Long类型,并增加#{id,jdbcType = BIGINT}
问题原因:mybatis #替换是使用预编译的方式,会将#{}替换为?,在将参数绑在?上,在入参传入的数据类型和数据库字段数据类型无法对应且数据量大时就会出现替换慢的问题。
上一篇:集群与分布式:区别与联系