将列添加到具有默认值且约束不为空的表时。在数据库处于负载状态时,最好以单个语句运行或将其分解为步骤。
ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL
与
ALTER TABLE user ADD country VARCHAR2(2) UPDATE user SET country = 'GB' COMMIT ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL
性能取决于您使用的Oracle版本。无论如何都会生成锁。
原文链接:https://www.f2er.com/oracle/205801.html如果版本<= Oracle 11.1,则#1与#2相同。反正慢了
从Oracle 11.2开始,Oracle为第一个语句(一个命令全部执行)引入了一个很好的优化。您不需要更改命令 – Oracle的行为不同。它仅将默认值存储在数据字典中,而不是更新每个物理行。
但我也不得不说,我以前遇到过一些与此功能有关的错误(在Oracle 11.2.0.1中)
>传统导入失败,如果导出完成直接= Y
> merge语句可以抛出一个ORA-600 [13013](内部的oracle错误)
>使用这种表的查询中的性能问题
我认为这个问题在当前版本11.2.0.3中是固定的,所以我可以推荐使用这个功能。