我在制作中有一张表A
(3列),大约有1000万条记录。我想在该表中再添加一列,并且我希望将默认值设置为1.是否会影响生产数据库性能如果添加默认值为1的列或其他内容。什么是最好的方法来避免对DB的任何性能影响?你的想法非常感谢!!
答案 0 :(得分:10)
在Oracle 11g中,添加具有默认值的新列的过程已经大大优化。如果新添加的列被指定为NOT NULL
,则该列的默认值将保留在数据字典中,并且不再需要为表中的所有记录存储列的默认值,因此它不是使用默认值更新每条记录所需的时间更长这种优化大大减少了工作台在操作过程中被独占锁定的时间。
alter table <tab_name> add(<col_name> <data_type> default <def_val> not null)
此外,具有默认值的列不会消耗空间,直到您故意开始更新该列或插入具有该列的非默认值的记录。因此,添加具有默认值和not null
约束的新列的操作非常快速。
答案 1 :(得分:0)
我认为使用以下语法创建表作为备份表更好:
create table BackUpTable as SELECT * FROM YourTable;
alter table BackUpTable add (newColumn number(5,0)default 1);