注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

常在心

淡泊明志,人生自在

 
 
 

日志

 
 

oracle11g在线加字段注意点  

2012-04-28 17:05:41|  分类: oracle问题 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有很多人都说,包括oracle官方也说了,在11g后在线加字段,默认是将那些值记录到一个视图里面,在这边也进行了测试后,相信很多人也碰到过类似的问题,就是还是时间上没有达到效果,下面就这个问题进行了仔细的测试,发现了问题的所在:

16:53:25 SQL> select count(*) from test; 

  COUNT(*)
----------
     78830

Elapsed: 00:00:00.10
16:54:30 SQL> alter table test add (col2 varchar2(20) default 'hellooooo');

Table altered.

Elapsed: 00:00:01.64

16:55:23 SQL> alter table test add (col3 varchar2(20) default 'hellooooo' not null);

Table altered.

Elapsed: 00:00:00.06

可以看到时间上完全不一样的,引用官方的说法:
If a new column is added to a table, the column is initially NULL unless you specify the DEFAULT clause. When you specify a default value, the database immediately updates each row with the default value. Note that this can take some time, and that during the update, there is an exclusive DML lock on the table. For some types of tables (for example, tables without LOB columns), if you specify both a NOT NULL constraint and a default value, the database can optimize the column add operation and greatly reduce the amount of time that the table is locked for DML. 

意思就是在oracle 11g以后,如果在添加字段,有default值,但没有加not null会更新目前已经有的所有数据,这样花费的时间就会比较久,如果加上default并带上not null就可以大大减少DML锁的时间。

或者可以采用如下的方式:
alter table test add (col3 varchar2(20));
alter table test modify (col3 default 'helloooo');
  评论这张
 
阅读(416)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017