标题 | 关于考勤管理系统中的SQL语句优化解析 |
范文 | 黄娟 摘要:该文针对沙钢集团人力资源管理信息系统中月初汇总上一月考勤数据的数据库过程运行效率低得问题,通过优化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次左右。大大缩短了过程执行的时间。 2) 用索引提高效率,具体应用是将过程中涉及的表按照条件中应用到的列的次序建立索引。这里要提到的是一开始只注意到考勤表数据量大,需要建立索引,没有注意到汇总表。虽然考勤表以百万计,而汇总表只以万计,但是在操作汇总表时索引的创建极大地提高了效率。对汇总表操作UPDATE语句由原来的数小时降低到半分钟左右。 3) 尽量多的使用COMMIT。在循环处理各考勤项目汇总时,对产生的数据进行COMMIT操作。这样做的好处不仅是释放了数据库资源,同时在數据中也即是保存了数据,能即是了解数据处理到哪一个环节。 4) 尽量不在条件语句中出现的列上使用函数。过程中使用到的日期在数据库中存储的是TIMESTAMP类型,而统计的维度是一个自然月。这里对进行比较的自然月进行了处理,将月初月末类型装换成TIMESTAMP类型来取代在原先采用的将数据库表日期列装换成自然月的字符串类型的方法。这种方法使数据转换由原来的每条数据一次缩减到一条SELECT一次,减少了ORACLE转换数据类型需要的时间。 3 结束语 ORACLE SQL性能优化的一些措施在人力资源管理信息系统的考勤汇总中的应用大大提高了数据库汇总过程的执行效率,为考勤记录的统计、考勤报表的生产提供了数据,为薪酬模块、绩效模块和奖金模块的顺利上线做好了数据准备。 参考文献: [1] 黄河. Oracle9i数据库系统培训教程[M]. 北京: 清华大学出版社, 2002. [2] Thomas Kyte. Oracle专家高级编程[M]. 北京: 清华大学出版社, 2002. [3] Kevin Loney. Oracle9i: The Complete Reference[Z].Oracle公司技术参考书. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。