您所在的位置:http://www.qk114.net > 论文 > 计算机论文 > 正文
摘要:该文针对沙钢集团人力资源管理信息系统中月初汇总上一月考勤数据的数据库过程运行效率低得问题,通过优化SQL语句,提高了汇总过程的执行效率。
关键词:ORACLE;SQL;考勤;数据库访问;索引
中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2017)33-0031-01
沙钢集团人力资源管理信息系统中考勤模块记录考勤信息时每人每天两条数据,分别记录上午和下午的出勤情况。以集团本部19500人计算,每个月的考勤记录大约是117万条数据,加上成员企业的考勤记录和考勤表中需要有三个月左右数据,日常考勤表中维持的数据量大概有600万条数据左右。本部薪酬计算用到的考勤数据需要从这张考勤表中取出数据并按工号及部门分别进行汇总形成每人每个部门(考虑到人员部门调动情况)一条考勤数据。
1 难点及主要采取措施
考勤数据汇总中遇到的难点一是数据量大,数据在600万条以上,对这些数据的处理需要考虑ORACLE的性能;二是对新入职员工职校考勤时的考勤项目名称是对应正常考勤项目名称后加“*”,但是在数据库中记录的考勤项目时是记录对应项目的FID。因此在汇总考勤数据前需要将职校考勤数据做特殊处理,将考勤项目转换成对应的正常考勤项目;三是人力资源管理信息系统数据库中各类基础表比较多,考勤表中记录的信息主要是各类信息的FID,需要多表关联才能将汇总表中的信息全部显示出来。
针对这些情况,主要采取的措施有以下几个方面:
1) 减少数据库访问次数。在执行每条SQL语句时, ORACLE内部执行了许多工作: 解析SQL语句, 估算索引的利用率,绑定变量, 读数据块等等。因此减少访问数据库的次数, 就能实际上减少ORACLE的工作量。
2) 用索引提高效率。索引是表的一个概念部分,用来提高检索数据的效率。实际上,ORACLE使用了一个复杂的自平衡B-tree结构。当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引。 同样在联结多个表时使用索引也可以提高效率。 除了那些LONG或LONG RAW数据类型,你可以索引几乎所有的列。在大型表中使用索引特别有效。
3) 尽量多的使用COMMIT。只要有可能,在程序中尽量多使用COMMIT,这样程序的性能能得到提高,需求也会因为COMMIT所释放的资源而减少:COMMIT所释放的资源有回滚段上用于恢复数据的信息,被程序语句获得的锁,REDO LOG BUFFER中的空间,ORACLE为管理上述3种资源中的内部花费。
2 具体应用
针对具体在考勤汇总中遇到的问题主要在下面几个方面做了修改:
1) 尽量减少对数据库的访问次数,具体体现在能够一次SELECT,INSERT,UPDATE操作的数据不要分多次循环处理。因此将过程中对每个工号的员工进行循环统计各考勤项目的天数修改成对考勤项目进行循环统计所有人该考勤项目的对应天数。这种处理方式使循环次数由原来的19500次左右缩短到15次左右。大大缩短了过程执行的时间。