减少与数据库的连接,提高请求效率
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,工时系统代码优化记录:在查看工时详情的时候,我们需要将个人的工时分项目,每月进行一个展示。一年有12个月,一个人有多个项目。初始代码只是为了实现功能,所以在代码中进行的循环操作,即每个项目每月到数据库
千家信息网最后更新 2024年09月22日减少与数据库的连接,提高请求效率
工时系统代码优化记录:
在查看工时详情的时候,我们需要将个人的工时分项目,每月进行一个展示。
一年有12个月,一个人有多个项目。
初始代码只是为了实现功能,所以在代码中进行的循环操作,即每个项目每月到数据库中获取该用用户的工时统计。
这样就造成了多次请求数据库,强求效率很低。差不多查询一次要2500ms的时间。这样肯定的不行的。
优化:优化采用每个项目只与数据库建立一次连接。采用存储过程进行调用。
这样就将数据库的连接次数大大减少了。
以下是没有优化前的代码。
工时系统:查看工时详情,(4个项目为例子)原来的代码请求数据库2*12*4+1=97次。优化后的数据,请求数据库5次(首先查询所有的项目,然后每个项目去查询一次。) /* * 查询项目在每月已提交的工时 */ // 查询每个人的项目id ListworkDetailList = workDetailManager.getProjectIdByUser(userId);//第一次 List projectList = new ArrayList<>(); for (WorkDetail workDetail : workDetailList) {//循环4次 Integer projectId = workDetail.getProjectId(); Project project = projectManager.get(projectId); // 每月去查询 for (int i = 0; i < countMonth; i++) {//循环12次 Double reportCount = new Double("0"); String workDay = String.valueOf(year) + months[i]; WorkDetailQuery query = new WorkDetailQuery(); query.setState(10); query.setProjectId(projectId); query.setUserId(userId); // 如果当月还没有到月底,统计至当天的前一天为准。 Integer beforNowDay = Integer.valueOf(dateStr) - 1; if (workDay.equals(dateStr.substring(0, 6))) { query.setStartDate(workDay + "01"); query.setEndDate(beforNowDay.toString()); query.setWorkType("FUL"); Integer fulCount1 = workDetailManager.count(query);//查询是半天还是全天 每月循环一次 query.setWorkType("PAR"); Integer parCount1 = workDetailManager.count(query);//查询是半天还是全天 每月循环一次 reportCount = (parCount1.doubleValue() / 2) + fulCount1.doubleValue(); } else { query.setWorkDay(Integer.valueOf(workDay)); query.setWorkType("FUL"); Integer fulCount = workDetailManager.count(query); query.setWorkType("PAR"); Integer parCount = workDetailManager.count(query); reportCount = (parCount.doubleValue() / 2) + fulCount.doubleValue(); } if (reportCount == 0.0) { reportCount = null; } // 保存到每个月 if ("01".equals(months[i])) { project.setJanCount(reportCount); } else if ("02".equals(months[i])) { project.setFebCount(reportCount); } else if ("03".equals(months[i])) { project.setMarCount(reportCount); } else if ("04".equals(months[i])) { project.setAprCount(reportCount); } else if ("05".equals(months[i])) { project.setMayCount(reportCount); } else if ("06".equals(months[i])) { project.setJunCount(reportCount); } else if ("07".equals(months[i])) { project.setJulCount(reportCount); } else if ("08".equals(months[i])) { project.setAugCount(reportCount); } else if ("09".equals(months[i])) { project.setSeptCount(reportCount); } else if ("10".equals(months[i])) { project.setOctCount(reportCount); } else if ("11".equals(months[i])) { project.setNovCount(reportCount); } else if ("12".equals(months[i])) { project.setDecCount(reportCount); } } projectList.add(project); }
优化后速度很大提升,请求时间一般为180ms,满足实际需求。
总结:报表查询中一定要减少请求数据库的次数。尽量采用多表查询或存储过程调用的方式。
查询
项目
数据
数据库
工时
代码
循环
个人
全天
时间
次数
系统
详情
过程
还是
存储
统计
效率
不行
很大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江苏机电计算机网络技术推广设备
网络安全课程设计实验心得
数据库用户安全方案
华为鲲鹏服务器能干嘛
数据库怎么替换日期里的星期
vb数据库怎么打印
接口数据库设计工具
软件开发公司运维人员的职责
服务器安装redhat
1.9粘土服务器
软件开发工程师是挂靠
米思米无法访问服务器端口
钉钉服务器崩溃表情包
协同通信软件开发
mes服务器上门维修
计算机网络技术应用方向学习
硕士论文全文数据库
查看网页数据库
超新星计算机网络技术考试答案
网络安全信息的实施方案医院
服务器cpu类型
wlan网络安全性考虑
高品质软件开发平台
企业微信软件开发
澳大利亚 网络安全
徐汇区品牌网络技术服务参考价格
sql服务器管理没有
使用jdbc连接数据库
青海创新网络技术服务怎么样
物理服务器网卡