sql语句在navicat中执行快,但是在程序中执行慢问题 您所在的位置:网站首页 java调用es查询过慢 sql语句在navicat中执行快,但是在程序中执行慢问题

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

2024-06-03 09:29| 来源: 网络整理| 查看: 265

一、前因

在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 * from test_007 where del_flag = 0 and type = #{type} //自定义的查询总数的语句 type 你上面怎么用的这个怎么用就可以了 select count(0) from test_007 where del_flag = 0 and type = #{type}

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

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

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有