sql语句在navicat中执行快,但是在程序中执行慢问题

一、前因

在mysql数据库中存储了100万数据,然后进行列表查询的时候发现相当慢,差不多要3-4秒左右才能查出来。

如上图        

...就很离谱。

刚开始是真的没有思路,后来在网上查了一下,又问了一下gpt,但是感觉都不是我想要的结果。

虽然都实验了一下,但是都很繁琐,就很懒,嗯~ o(* ̄▽ ̄*)o

二、过程

找了好久,看大佬们说的都是什么 mybatis 的 流式查询 感觉很厉害的样子,然后我就照着给弄了一下,真难,没弄出来,他报错。/(ㄒoㄒ)/~~

于是所幸就直接堵死这条路,换个路,直接看看mybatis到底执行了个啥东东。

开启mybatis sql日志需要在log日志和 mybatis配置上加上如下配置(yml)

configuration:
  #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 可以看到我这个是list列表,用了分页,所以可以看到他是执行了两条sql语句的,而且mybatis也直接给了提示的。 所以说我先头的方向就可能不对 /(ㄒoㄒ)/~~

因为用了分页所以这里mybatis给生成了一条语句,去查询了我们数据的总数,就是这里耗费了大量的时间。

终于,找到了问题原因,那就好解决了。

在网上搜了一下,然后发现都好繁琐,一下我就不想动了。

然后我就搜到了一位大佬的方法,下面链接
https://blog.csdn.net/qq_41972951/article/details/127494932

该说不说,大佬的是真的香,简洁明了

下面是一个模板,可以直接cv过去用。

<select id="getByList" resultMap="HlDepotHeadResult">
      //你的查询数据的语句,正常用就好
      select * from test_007 where del_flag = 0 and type = #{type}
</select>

<select id="getByList_COUNT" resultType="java.lang.Long">
      //自定义的查询总数的语句 type 你上面怎么用的这个怎么用就可以了
      select count(0) from test_007 where del_flag = 0 and type = #{type}
</select>

用这种方法,数据从原先的2-3s直接进入了500ms以内

最后,可以将查出来的总数存入redis中,这样下次查询的时候可以选择先走redis的,这样第一次会相对慢一些,剩下的访问基本上可以做到200ms。

如果可以也可以弄一个记录表信息的表,然后直接从里面查(不过我还没试过)可以根据情况自行选择。

总结: 大佬东西真的香。而懒可以激发潜能,( •̀ ω •́ )y

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值