sql语句在navicat中执行快,但是在程序中执行慢问题 | 您所在的位置:网站首页 › java调用es查询过慢 › 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 * 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 实验室设备网 版权所有 |