问题描述
你好,
在工作中,我们有一个更新脚本,大约需要20个小时,一些最苛刻的查询是我们更改一些值的更新,例如:
像这样,我们有很多更新。问题是这些表有大约1000万行。我们也有一些更新,其中一些列将有一个默认值,但它们是可空的 (我知道如果他们有not null和默认约束,那么这样的列的添加几乎是立即的,因为值是在目录中),然后更新或添加此类列会花费大量时间。
我的方法是重新创建表 (正如汤姆在https://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:6407993912330)。但我不知道如何从原始表中retrive一些列,这些列将保持不变,还有其他将更改为默认值 (在更新之前,这样的列有一个明智的信息),这是因为我们需要保留一些信息私有。
所以,我的方法是这样的:
希望对如何提高此类产品的性能有一个想法。
提前谢谢!
在工作中,我们有一个更新脚本,大约需要20个小时,一些最苛刻的查询是我们更改一些值的更新,例如:
UPDATE table1 SET column1 = DECODE(table1.column1,null,null,'no info','no info','default value'), column2 = DECODE(table1.column2,null,null,'no info','no info','another default value'), column3 = 'default value';复制
像这样,我们有很多更新。问题是这些表有大约1000万行。我们也有一些更新,其中一些列将有一个默认值,但它们是可空的 (我知道如果他们有not null和默认约束,那么这样的列的添加几乎是立即的,因为值是在目录中),然后更新或添加此类列会花费大量时间。
我的方法是重新创建表 (正如汤姆在https://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:6407993912330)。但我不知道如何从原始表中retrive一些列,这些列将保持不变,还有其他将更改为默认值 (在更新之前,这样的列有一个明智的信息),这是因为我们需要保留一些信息私有。
所以,我的方法是这样的:
CREATE TABLE table1_tmp PARALLEL NOLOGGING AS (select col1,col2,col3,col4 from table1); ALTER TABLE table1_tmp ADD ( col5 VARCHAR(10) default('some info') NOT NULL; ALTER TABLE table1_tmp ADD ( col6 VARCHAR(10) default('some info') NOT NULL; ALTER TABLE table1_tmp ADD ( col7 VARCHAR(10); ALTER TABLE table1_tmp ADD ( col8 VARCHAR(10); MERGE INTO table1_tmp tt USING table1 t ON (t.col1 = tt.col1) WHEN MATCHED THEN UPDATE SET tt.col7 = 'some defaul value that may be null', tt.col7 = 'some value that may be null';复制
希望对如何提高此类产品的性能有一个想法。
提前谢谢!
专家解答
所以你要复制表格并添加一堆列?
只需在select子句中添加表达式即可。如果需要,您可以在此处执行解码/大小写表达式。
您可以在新表的列列表中定义默认值和非null约束。
如果任何新列将为null,则只需选择null:
只需在select子句中添加表达式即可。如果需要,您可以在此处执行解码/大小写表达式。
您可以在新表的列列表中定义默认值和非null约束。
如果任何新列将为null,则只需选择null:
CREATE TABLE table1_tmp ( col1,col2,col3,col4, col5 default 'some info' not null, col6 default 'some info' not null, col7,col8 ) AS select col1,col2,col3,col4, 'some info' col5, 'some info' col6, 'some defaul value that may be null' col7, null col8 from table1;复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
757次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
647次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
569次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
525次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
516次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
497次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
482次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
440次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
372次阅读
2025-05-05 19:28:36