运用临时表方案优化薪酬核算函数中的数据查询性能原创
金蝶云社区-苏四ss
苏四ss
2人赞赏了该文章 247次浏览 未经作者许可,禁止转载编辑于2022年10月10日 09:45:17

    薪酬核算中,经常要关联查询考勤结果表T_HR_ATS_AttendanceResult,随着客户系统的长期使用,此表的数据量十分庞大,以某个使用了4年的客户为例,考勤结果表的数据量已经达到5千万级,导致某些需要关联查询考勤结果的核算函数执行起来耗时非常久,严重拉低了整体薪酬核算的性能。

    针对此情况优化的方案是,创建临时表,先把满足当前期间薪酬核算的考勤数据取出来,放在临时表中并创建索引,后续取数都从临时表中取。

    String tempAttResultTab = TempTablePool.getInstance(ctx).createTempTableName();
    String insertAttResultTab = " SELECT t.* into "+tempAttResultTab 
	+" from T_HR_ATS_AttendanceResult t where t.FATTENCEDATE between {ts'"+beginDateStr+"'} and {ts'"+endDateStr+"'} "
        +" and t.FPROPOSERID in (select a.FPERSONID from t_hr_scmpcaltable a inner join "+tempCalTableName+" "
        +" b on b.FID = a.FID  where a.fcalSchemeid='"+calschemeid+"' )";
    DbUtil.execute(ctx, insertAttResultTab);

    //临时表创建索引
    String attResultTabIndex = "IX_HR_ATTRST"+String.valueOf(endTime2);
    String createIndexSql2 = "create index "+attResultTabIndex+" on "+tempAttResultTab+"(FPROPOSERID,FATTENCEDATE) ";
		   
    DbUtil.execute(ctx, createIndexSql2);


图标赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0