mybatis分页卡顿分析解决

背景:

分页卡顿接近一分钟,slow sql 显示 select count(0)  的时候耗时25秒,inner join order by 一堆问题,索引走了,explain 显示row还有6w多。

解决方案:

1、分页插件里,不再查询总数,如PageHelper.startPage(,,false);

2、对应list的sql,在mapper.xml里,自己手搓一个xxx_count,如原来是queryAbcList查询列表,那么需要在写一个queryAbcList_ COUNT方法,这里就可以很好的发挥了,order by ,inner join 都去掉;

3、多线程,如下图:

//定义线程数
        int subThreadNum = 2;
        CountDownLatch countDownLatch = new CountDownLatch(subThreadNum);
final list = null;
        final total= {0};
        for (final int[] i = {0}; i[0] < subThreadNum; i[0]++) {
            logger.info("i[0],run:{}",i[0]);
            if(i[0]==0){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                           list列表查询
                    } catch (Exception e) {
                       
                    } finally {
                        //线程结束时,将计时器减一
                        countDownLatch.countDown();
                       
                    }
                }}).start();
            }else if(i[0]==1){
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                          total金额查询
                    } catch (Exception e) {
                       
                    } finally {
                        //线程结束时,将计时器减一
                        countDownLatch.countDown();
                      
                    }
                }}).start();
            }
        }
        //等待所有的子线程结束
        countDownLatch.await();

我们将插件里的list和total拆开,利用多线程,从代码层面,解决卡顿。

当然如果索引能解决最好,解决不了使用如上方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值