使用Jpa遇到查询特别慢的情况(limit和order by坑)

项目中数据量过八百万遇到查询慢的问题

问题

项目后期进行压力测试,当mysql表数据过8百万时,进行查询需要20多秒,在navicat中用sql执行了一遍发现应该1秒左右。

解决

因为项目前期使用的是JPA,将JPA转成JdbcTemplate来查询数据。但是结果发现访问时间还是20多秒。反复测了几次发现,原来我之前测试1秒,是由于order by和limit没有一起使用,前面都是单独测的。最后我将整个查询语句封装了一个子查询,将order by 放在子查询里。将limit发在外部,这个问题就解决了。网上查阅资料应该是limit 中也使用了order,导致了全表扫描。

select * from table where 1=1... order by date limit 0,50; 20秒
select * from (select * from table where 1=1... order by date)a limit 0,50; 1秒

jpa还是有很多问题的,虽然提供了越来越多的优化,但是项目深入发展下去很容易造成性能瓶颈,后面的改造会比较麻烦。mysql确实是吃程序员水平的数据库,JPA前期写着很开心,后面改起来比较麻烦,无法处理复杂sql

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值