【问题标题】:Optimization SQL update on a large table大表上的优化 SQL 更新
【发布时间】:2020-06-10 08:30:39
【问题描述】:

我需要你的帮助来更新一个大表(大约 50 亿行 - 基本 oracle 11g)。 我使用 SQL plus 从 SHELL 脚本生成并执行我的更新,但我的查询的执行需要很多时间,有没有办法加快我的更新:

Update My_table
Set CODE = ‘F’ where  date=’2020/06/05’ and ID=’87444’  and GROUP=’GGG’ and NUM_FAC=’15444’
Update My_table
Set CODE = ‘D’ where  date=’2020/06/01’ and ID=’85544’  and GROUP=’GGG’ and NUM_FAC=’55555’
Update My_table
Set CODE = ‘I’  where  date=’2020/06/03’ and ID=’85544’  and GROUP=’GGG’ and NUM_FAC=’55555’
….. Plusieurs lignes  
Commit ;  ```
Exit SUCCESS
Thank you in advance for your help.

【问题讨论】:

  • 在你得到答案之前,这是一本好书:asktom.oracle.com/pls/asktom/…
  • 您将总共更新 50 亿行中的多少?你有什么索引?
  • 您使用的是 Postgresql 还是 Oracle?

标签: sql oracle11g oracle-sqldeveloper


【解决方案1】:

将常用条件移至WHERE 子句,然后使用CASE 表达式:

Update My_table
    Set CODE = (CASE WHEN date = '2020/06/05' THEN 'F'
                     WHEN date = '2020/06/01' THEN 'D'
                     WHEN date = '2020/06/03' THEN 'C'
                     . . .
                END)
WHERE ID = '85544'  and GROUP = 'GGG' and NUM_FAC = '55555' AND
      DATE IN ('2020/06/05', '2020/06/01', '2020/06/03', . . . );

【讨论】:

  • 感谢您的回复,我尝试了您的请求,但不幸的是它只适用于少量数据,当我有几行要执行更新:UPDATE My_table SET OPERATION = ( CASE when NUM_FA='222' AND NUM_LO='27' THEN '0' when NUM_FA='333' AND NUM_LO='82' THEN '2' when NUM_FA='555' AND NUM_LO= '82' THEN '8' .... 7000 行 END) where NUM_EM='FFFF' AND NUM_DES='GGG' AND NUM_FA IN ('222','333', '555'....., 7000 NUM_FA ) ; / 退出成功
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2013-11-20
  • 2013-07-18
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多