记录一次接口性能优化
查询接口性能优化
两个查询接口,涉及四个不同的表,其中有一个表数据量较大;
一开始编码实现的方法,调用接口发现耗时特别长,三四秒钟:
使用Spring StopWatch分析代码运行时间,找到是哪里导致整个接口时间需要这么久的:
StopWatch stopWatch = new StopWatch(); // 开始时间 stopWatch.start(); // 执行时间(1s) Thread.sleep(1000); // 结束时间 stopWatch.stop(); // 统计执行时间(秒) System.out.printf("执行时长:%f 秒.%n", stopWatch.getTotalTimeSeconds()); // %n 为换行 // 统计执行时间(毫秒) System.out.printf("执行时长:%d 毫秒.%n", stopWatch.getTotalTimeMillis()); // 统计执行时间(纳秒) System.out.printf("执行时长:%d 纳秒.%n", stopWatch.getTotalTimeNanos());
先分析什么原因导致的,明显能感觉得到的是查询那个数据量大的表导致调用接口时间过长,检查代码执行逻辑,分析有一些foreach中的查询语句可以提取出来,放在循环外面只需要查询一次保存到内存中,后面使用直接从内存中拿这个值;
然后有一些查询可以进行联表查询,但sql语句改写成联表查询时间反而变长了,没来得及仔细研究是什么原因导致的,也可能是sql语句数据处理有问题;
把for循环中的所有涉及查询数据库的语句能提取出来就提取出来作为公共的,然后就是优化sql语句编写方式,最终将两个查询接口从查询一次需要三四秒甚至四五秒,到七八百、三四百毫秒。
__EOF__

本文作者:techgy
本文链接:https://www.cnblogs.com/techgy/p/17389471.html
关于博主:I am a good person
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/techgy/p/17389471.html
关于博主:I am a good person
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~