【问题标题】:Fine tuning update query微调更新查询
【发布时间】:2013-11-18 10:18:41
【问题描述】:

我正在 peoplesoft 应用程序引擎中开发批处理。

我已从 JOB 表中将数据插入到暂存表中。

总共有120,596名员工,他们的数据需要处理,这是在开发环境中。

在测试环境中,要处理的行数是249047。

还有许多非工作数据也必须发送给员工。

我的设计是编写单独的更新语句来更新表中的数据,然后我将从暂存表中选择数据并将其写入文件中。

更新太费时间,我想知道一种微调它的技术。

搜索了很多东西,甚至尝试在更新查询中使用/* +Append */,但它会抛出错误消息sql command not ended

另外,我的更新查询必须检查 nvl 或 null 值。

有没有办法通过stackoverflow分享代码,我的意思是,这是insert,update语句,写在peoplesoft action中,这样这里的人可以看看吗?

请给我一个技巧,我的目标是在 5-10 分钟内完成执行。

我的更新声明:

我已经找到原因了。就是这个更新声明

 UPDATE %Table(AZ_GEN_TMP) 
  SET AZ_HR_MANAGER_ID = NVL(( 
 SELECT e.emplid 
  FROM PS_EMAIL_ADDRESSES E 
 WHERE UPPER(SUBSTR(E.EMAIL_ADDR, 0, INSTR(E.EMAIL_ADDR, '@') -1)) = ( 
 SELECT c.contact_oprid 
  FROM ps_az_can_employee c 
 WHERE c.emplid = %Table(AZ_GEN_TMP).EMPLID 
   AND c.rolename='HRBusinessPartner' 
   AND c.seqnum = ( 
 SELECT MAX(c1.seqnum) 
  FROM ps_az_can_employee c1 
 WHERE c1.emplid= c.emplid 
   AND c1.rolename= c.rolename ) ) 
   AND e.e_addr_type='PINT'), ' ') 

为了对此进行微调,我使用提示将值 contact_oprid 插入到临时表中。

SELECT /* +ALL_ROWS */ c.contact_oprid 
      FROM ps_az_can_employee c 
     WHERE c.emplid = %Table(AZ_GEN_TMP).EMPLID 
       AND c.rolename='HRBusinessPartner' 
       AND c.seqnum = ( 
     SELECT MAX(c1.seqnum) 
      FROM ps_az_can_employee c1 
     WHERE c1.emplid= c.emplid 
       AND c1.rolename= c.rolename ) ) 
       AND e.e_addr_type='PINT')

并对暂存表进行更新:

 UPDATE staging_table
  SET AZ_HR_MANAGER_ID = NVL(( 
 SELECT e.emplid 
  FROM PS_EMAILtable E 
 WHERE UPPER(REGEXP_SUBSTR(e.email_addr,'[^@]+',1,1)) = staging_table.CONTACT_OPRID 
   AND e.e_addr_type='PINT'),' ') /

这需要 5 个小时,因为它必须处理 20 万行数据。

有没有什么方法可以加快处理速度,我的意思是,使用提示或索引?

另外,如果我不使用这个,更新其他值的处理非常快,10分钟就完成了。

请帮我解决这个问题。

谢谢。

【问题讨论】:

  • 你有实际的代码吗?看看你在做什么会非常有帮助......通常,你应该能够在几秒钟内更新 120k 条记录,这样你就可以做一些别人应该能够改进的事情。
  • @Ben:代码是peoplesoft应用引擎的SQL action,非常庞大。如果给我某种框架会很好,这样我就可以在那里发布代码。数据库是oracle。谢谢
  • 正如@Ben 建议的那样,在没有看到实际进行更新的代码的情况下,我们只能猜测一些选项,但这只是猜测。
  • @Jorge Campos:我知道,我准备分享代码。但是,这是非常巨大的。它使用 %Execute(/) 和各种更新语句。
  • 我已经分享了更新查询。

标签: sql oracle peoplesoft


【解决方案1】:

我已经解决了这个问题,使用了 MERGE INTO TABLE oracle 语句,现在这个过程需要 10 分钟才能执行,包括文件写入操作。感谢大家的帮助和建议。

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多