[20120607]多余的空格-画蛇添足.txt

在10.2.0.4下,给表增加字段,一般情况下仅仅执行:

alter table t add (x number);

11G下新特性可以给增加的字段赋予一个缺省值,例子如下:

alter table t add (x number default 1);

会马上返回,执行很快.

但是如果在10g下执行如何呢?
alter table t add (x number default 1);
如果表很大,执行会很慢.

但是如果这样执行结构如何呢.

alter table t add (x1 number default NULL);
alter table t add (x2 number default NULL );

做一个测试看看.

1.建立测试环境:

SQL> select * from v$version ;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
drop table t purge ;
create table t as select rownum id, 'test' name from dual connect by level 
--alter table t add (x number default 1); =>忽略测试

2.执行如下:

set timing on
alter table t add (x1 number );
alter table t add (x2 number default NULL);
alter table t add (x3 number default NULL ); 
alter table t add ( x4 number default NULL); 
alter table t add ( x5 number default NULL ); 
SQL> alter table t add (x1 number );
Table altered.
Elapsed: 00:00:00.11
SQL> alter table t add (x2 number default NULL);
Table altered.
Elapsed: 00:00:00.04
SQL> alter table t add (x3 number default NULL );
Table altered.
Elapsed: 00:02:26.98
SQL> alter table t add ( x4 number default NULL);
Table altered.
Elapsed: 00:00:00.03
SQL> alter table t add ( x5 number default NULL );
Table altered.
Elapsed: 00:01:30.75

--可以发现添加字段X3消耗了2分28秒,添加字段x5消耗了1:30秒.why?
--两种的区别仅仅是)前的空格有无!

3.做10046跟踪看看.

drop table t purge ;
create table t as select rownum id, 'test' name from dual connect by level 
alter session set events '10046 trace name context forever, level 12';
alter table t add (x3 number default NULL );
alter session set events '10046 trace name context off';

查看跟踪文件可以发现如下:

update "T" set "X3"=NULL
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.01          0          1          0           0
Execute      1     11.45      11.53         35        470     244646      100000
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2     11.45      11.54         35        471     244646      100000
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 5     (recursive depth: 1)
Rows     Row Source Operation
-------  ---------------------------------------------------
      0  UPDATE  T (cr=508 pr=28 pw=0 time=9057310 us)
 214094   TABLE ACCESS FULL T (cr=451 pr=35 pw=0 time=214178 us)
Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file scattered read                          9        0.00          0.00
  db file sequential read                         3        0.00          0.00
  log file switch completion                      3        0.16          0.32
********************************************************************************

看来oracle在分析sql语句时有点问题.切记不要这样写,特别是在10.2.0.4.其他版本我没有测试.

时间: 2024-07-31 01:45:37

[20120607]多余的空格-画蛇添足.txt的相关文章

[20140723]多余的空格.txt

[20140723]多余的空格.txt --昨天同事想删除一个索引,发现无法删除,最后检查发现索引名字的后面多加了一个空格.自己做一个测试例子来演示: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Pro

快速删除word里面多余的空格技巧

  你有没有碰到过这要的情况,当你从网页上把一些自己需要的资料下载到Word中时,发现有许多的空格键,而且是那种箭头朝下的空格箭,很占据Word的空间,但要想删除的话也是可以一个一个删除的,很是费时,如何做到快速批量的删除呢?下面就跟xp系统之家小编一起来了解一下吧. 但你想要快速删除word文档里面很多个相同的没用的空格或是词组,你都可以点击菜单栏中的"编辑"→"替换" . 比如想要去掉多余的空格,可以在"查找内容"里面输入^l, "

Powershell小技巧之去除多余的空格_PowerShell

要去去除多余的空格,请尝试下面正则表达式: PS> '[ Man, it works! ]' -replace '\s{2,}', ' ' [ Man, it works! ] 你也可以用这个方法转换成固定格式的CSV表格: PS> (qprocess) -replace '\s{2,}', ',' >tobias,console,1,3876,taskhostex.exe >tobias,console,1,3844,explorer.exe >tobias,console

《Web测试囧事》——1.10 多余的空格造成服务器被删除

1.10 多余的空格造成服务器被删除 在敏捷测试中,测试工作不仅包括设计和执行测试用例.编写测试报告,以及测试计划和策略的制定,还有测试部署脚本等工作.这次小蔡在执行部署脚本的测试过程中发现了一个严重的问题,这个Bug会导致整个测试服务器被删除,事情的缘由是这样的. 小蔡根据开发人员提交的部署脚本和执行步骤,一步步在测试环境中进行部署,同时去验证部署脚本中是否有遗漏和错误.当执行完部署脚本中删除临时文件的步骤后,小蔡发现后续步骤都不能执行了!经过调查发现原因是测试服务器已经被格式化了. 虽然测试

《C语言及程序设计》实践参考——消除多余的空格

返回:贺老师课程教学链接  项目要求 [项目3:消除多余的空格]从键盘上的输入一句话,直到按回车键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格.例如,输入:I   am     a            teacher.,输出I am a teacher. [参考解答] #include <stdio.h> int main( ) { char c, frontIsSpace=0; //frontIsSpace用于记忆前面的符号是否为空格,是空格,值为1,不为空格,为0

vb6.0-用什么语句可以去掉字符串后面多余的空格啊,有没有比较简单的方法?是VB6

问题描述 用什么语句可以去掉字符串后面多余的空格啊,有没有比较简单的方法?是VB6 如题,快来帮忙如题,快来帮忙如题,快来帮忙如题,快来帮忙 如题,快来帮忙如题,快来帮忙如题,快来帮忙如题,快来帮忙 解决方案 trim函数http://www.cnblogs.com/rosesmall/archive/2012/09/14/2684961.html 解决方案二: Trim 是去掉开头和结尾的空格! 如:"Map" & trim(" 3 ") & &q

新浪面试题:删除字符串中多余的空格

题目描述: 给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个.  比如 "  I like     http://hi.baidu.com/mianshiti  " 会变成 "I like http://hi.baidu.com/mianshiti". void RemoveExtraSpace(char* str) { bool keep_space = false; int new_str_end = 0; for (int i = 0;

C++第17周项目2——用指针玩字符串(6)去多余空格

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 [项目2-用指针玩字符串]神奇的指针哟,指向整型的指针int *p1,可以操作整型数组int a[]:指向字符型的指针char *p2,可以操作字符数组(字符串)char str[]:指向指针的指针可以操作二维数组.更灵活的是,在函数的传递中,指针.数组名在一定程度上可以互换. 本项目试图通过编制操作字符串的函数,实现字符串的操作. 请编制函数,其功能是对字符串的进行操作

过滤Android工程中多余资源文件的解决方法_Android

本文以实例讲述了过滤Android工程中多余资源文件的解决方法,很有实用价值!具体描述如下: 很多开发人员在Android项目开发过程中经常会遇到这样的情况:界面开发人员发布了一个新版本的资源包,不过有的图片名称改了,有的图片删掉了,可是在实现的时候开发人员只是把新的资源覆盖到原来的资源文件夹中,随着版本的发布,在drawable或values中积累的无用资源越来越多,直到最后发布正式版的时候再想要删除这些多余的文件,于是不得不一个一个文件检查看是否有用,再决定要不要删除之. 有鉴于此,很有必要