问题描述
我正在添加许多具有默认值的列,这些列可以为空到大表中
例如
这需要很长时间才能完成,因为当提交ALTER表时,Oracle在幕后执行了一些递归SQL。
从并行启用外键约束的经验来看,我做到了这一点;
以上工作并强制执行Oracle在验证要并行执行的FK约束时执行的递归SQL。
然而,应用相同的方法,我曾使用的启用FK约束并行添加NULLABLE列与默认值-它不工作,递归更新上面是拒绝去并行 (即使执行计划显示并行)。
我错过了一个 “把戏” 吗?还是在后来的Oracle、12c等版本中对此进行了改进?
如果我可以让递归更新并行,我知道那么ALTER会更快,因为作为一个单独的测试,我并行运行该更新,它确实并行完成了。
所有统计数据都是最新的。
例如
alter table big_table add (col1 varchar2(1) default 0, col2 varchar2(1) default 0);复制
这需要很长时间才能完成,因为当提交ALTER表时,Oracle在幕后执行了一些递归SQL。
update big_table set col1 = '0', col2 = '0'复制
从并行启用外键约束的经验来看,我做到了这一点;
alter session force parallel dml; alter session force parallel query; alter session force parallel ddl; alter table big_table parallel; -- now do my foreign key constraints => first enable novalidate, then validate alter table big_table noparallel;复制
以上工作并强制执行Oracle在验证要并行执行的FK约束时执行的递归SQL。
然而,应用相同的方法,我曾使用的启用FK约束并行添加NULLABLE列与默认值-它不工作,递归更新上面是拒绝去并行 (即使执行计划显示并行)。
我错过了一个 “把戏” 吗?还是在后来的Oracle、12c等版本中对此进行了改进?
如果我可以让递归更新并行,我知道那么ALTER会更快,因为作为一个单独的测试,我并行运行该更新,它确实并行完成了。
所有统计数据都是最新的。
专家解答
您可以在添加列时强制使用该列,以利用快速列添加。那以后让它成为可空的?
alter table big_table add ( col1 varchar2(1) default 0 not null, col2 varchar2(1) default 0 not null ); alter table t modify ( col1 null, col2 null );复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
785次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
662次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
591次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
544次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
530次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
509次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
495次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
468次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
382次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
381次阅读
2025-05-05 19:28:36