同一sql mybatis比DBeaver慢了30倍

今天帮同事处理了一个bug,有个sql语句后端执行耗时6000多毫秒,在DBeaver中执行只需200毫秒,速度相差30倍。项目后端mybatis,数据库pgsql。

结合网上的资料和自己的经验,实验了三种方法:

1、mybatis参数连接符#换成$

结果有效,但有sql注入风险,代码审查不通过。

2、mybatis参数固定数据类型

如#{startTime}改为#{startTime,jdbcType=DATE}

结果无效。

3、调整where条件顺序

最后利用sql调优的思路,试着换了一下where条件的先后顺序,将能够最大过滤数据的条件从最右边挪到最左边,结果完美。

虽然问题解决,但还是有疑惑,根据我这个老码农的经验,where条件的执行顺序,不是从右往左执行吗?啥候成从左往右执行了?带着疑惑,我又查了下资料,恍然大悟:

oracle数据库where条件执行顺序是从右往左。

mysql、pgsql数据库where条件执行顺序是从左往右。 

因为我16年前开始工作时数据库基本是oracle天下,习惯了where从右往左的调优,久而久之,潜意识认为数据库都是从右往左了,犯了经验主义的错误啊。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值