上千条数据计算和多次对数据库操作 求优化思路

sui2121 2013-08-07 03:20:09
需求描述:
这是一个工资计算模块 其中主要涉及到大量计算和操作数据库的是考勤
考勤相关表有:考勤表 标准表 我需要先从根据标准表和考勤表 计算出每个人一个月的出勤情况,包括迟到(迟到分为大概3种迟到根据迟到时间不同) 早退(也大概是3种) 忘打卡次数 而且考勤表里面的考勤记录一个人一天不一定有多少条 要筛选出有用的数据
请假和外出 是根据一个其他系统接口获取字符串 然后截取其中的数据 再计算出需要的数据
其中主要需要优化的地方应该是 for循环很多次 有几个循环800次的循环 还有就是查询了30左右各表每个的数据量应该在2000左右
我的功能就是通过查询各种表 计算出每个人的工资 然后写到另一个表中。 现在计算20个人的工资大概需要49秒。
希望大神给个优化思路,小弟对大量的计算和大量的数据这方面涉及太浅,求指点!


...全文
245 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sui2121 2013-08-08
  • 打赏
  • 举报
回复
引用 2 楼 ldh911 的回复:
给几个通用性建议: 1、计算过程下推数据库(不要在代码中计算); 2、合理利用中间表(临时表); 3、大数据量处理任务化(定制成后台任务)。
这里面的第一点和第三点 能具体说一下吗 我没这么做过 是个菜鸟 求指点!
MiceRice 2013-08-08
  • 打赏
  • 举报
回复
引用 3 楼 sui2121 的回复:
这里面的第一点和第三点 能具体说一下吗 我没这么做过 是个菜鸟 求指点!
所谓下推数据库,就是建议用 聚合函数 甚至存储过程,总的来说就是SQL语句来完成主体计算过程,降低网路传输等开销。 任务化,就是不要将这些操作做成是实时由用户触发的;而是用户只能要求启动(或定时启动)该任务,后台计算完毕后,再通知用户来查询任务执行的结果。那么就可以晚上执行,白天看结果。
owen1759 2013-08-08
  • 打赏
  • 举报
回复
能说一下你的sql语句和表结构么? 你说的“从其他接口获取的字符串”这个处理难道是在计算考勤的时候才连接“其他系统”获取? 如果是这样的话,我觉得你的程序设计有问题,应该做个定时任务,每天凌晨(或者某个时刻)从“其他系统”获取考勤记录,进行处理(就是你说的字符串截取以及去除无效考勤记录),然后把真实有效的考勤结果用状态码记录在考勤表里 这样,在计算考勤的时候也就可以不再多次查询了。 当然,如果你由于种种限制不能做定时任务,也可以利用开启工资计算程序(C/S)或者打开工资计算页面(B/S)的时候,将上次计算之后至现在所有未进行数据处理的考勤记录都处理一遍。也能起到这样的效果
MiceRice 2013-08-07
  • 打赏
  • 举报
回复
给几个通用性建议: 1、计算过程下推数据库(不要在代码中计算); 2、合理利用中间表(临时表); 3、大数据量处理任务化(定制成后台任务)。
fishnobone 2013-08-07
  • 打赏
  • 举报
回复
最好把你相关的sql语句,相关的计算处理方法贴出来 你这样说的话,我只能提供你两个思路,一个是尽量减少对数据库的操作,二是是否可以采用多线程进行计算

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧