表字段顺序与性能

在做开发的时候或者设计表的时候,基本上都不考虑字段顺序的问题,其实字段的顺序是对性能有影响的。
这里通过一个实验来说明:
1、创建一个301列的表
  1  declare
  2  v_sql varchar2(4000);
  3  begin
  4  v_sql:='create table t_column(';
  5  for i in 1..300 loop
  6  v_sql:=v_sql||'n'||i||' number,';
  7  end loop;
  8  v_sql:=v_sql||'c_str varchar2(1000))';
  9  execute immediate v_sql;
 10* end;
2、往表中插入1万条数据
  1  declare
  2  v_sql varchar2(4000);
  3  begin
  4  v_sql:='insert into t_column select ';
  5  for i in 1..300 loop
  6  v_sql:=v_sql||'0,';
  7  end loop;
  8  v_sql:=v_sql||' null from dual connect by level <= 10000';
  9  execute immediate v_sql;
 10  commit;
 11* end;
3、收集统计信息
exec  dbms_stats.gather_table_stats(user,'t');
4、查询COUNT每个字段的消耗时间
declare
  v_dummy PLS_INTEGER;
  v_start PLS_INTEGER;
  v_stop Pls_Integer;
  v_sql varchar2(100);
begin
  v_start := dbms_utility.get_time;
  for i in 1..10 loop
    execute immediate 'select count(*) from t_column ' into v_dummy;
  end loop;
  v_stop := dbms_utility.get_time;
  dbms_output.put_line('COUNT*10次的时间是: '|| to_char((v_stop-v_start)*10,'999')||'毫秒');
  
  for i in 1..300 loop
    v_sql := 'select count(n'||i||') from t_column ';
    v_start := dbms_utility.get_time;
    for j in 1..10 loop
      execute immediate v_sql into v_dummy;
    end loop;
    v_stop := dbms_utility.get_time;
    dbms_output.put_line('count'||i||'列10次的时间是: '||to_char((v_stop-v_start)*10,'999')||'毫秒');
  end loop;
end;

结果:
COUNT*10次的时间是:   40毫秒
count1列10次的时间是:   40毫秒
count2列10次的时间是:   50毫秒
count3列10次的时间是:   40毫秒
count4列10次的时间是:   50毫秒
count5列10次的时间是:   50毫秒
count6列10次的时间是:   50毫秒
count7列10次的时间是:   40毫秒
count8列10次的时间是:   50毫秒
count9列10次的时间是:   50毫秒
count10列10次的时间是:   40毫秒
count11列10次的时间是:   50毫秒
count12列10次的时间是:   50毫秒
count13列10次的时间是:   50毫秒
count14列10次的时间是:   50毫秒
count15列10次的时间是:   50毫秒
count16列10次的时间是:   50毫秒
count17列10次的时间是:   60毫秒
count18列10次的时间是:   50毫秒
count19列10次的时间是:   60毫秒
count20列10次的时间是:   50毫秒
count21列10次的时间是:   60毫秒
count22列10次的时间是:   50毫秒
count23列10次的时间是:   60毫秒
count24列10次的时间是:   60毫秒
count25列10次的时间是:   50毫秒
count26列10次的时间是:   60毫秒
count27列10次的时间是:   60毫秒
count28列10次的时间是:   70毫秒
count29列10次的时间是:   60毫秒
count30列10次的时间是:   60毫秒
count31列10次的时间是:   60毫秒
count32列10次的时间是:   60毫秒
count33列10次的时间是:   70毫秒
count34列10次的时间是:   60毫秒
count35列10次的时间是:   70毫秒
count36列10次的时间是:   70毫秒
count37列10次的时间是:   60毫秒
count38列10次的时间是:   60毫秒
count39列10次的时间是:   70毫秒
count40列10次的时间是:   70毫秒
count41列10次的时间是:   60毫秒
count42列10次的时间是:   70毫秒
count43列10次的时间是:   70毫秒
count44列10次的时间是:   70毫秒
count45列10次的时间是:   70毫秒
count46列10次的时间是:  120毫秒
count47列10次的时间是:  120毫秒
count48列10次的时间是:  130毫秒
count49列10次的时间是:  120毫秒
count50列10次的时间是:  130毫秒
count51列10次的时间是:  120毫秒
count52列10次的时间是:  130毫秒
count53列10次的时间是:  130毫秒
count54列10次的时间是:  120毫秒
count55列10次的时间是:  140毫秒
count56列10次的时间是:  130毫秒
count57列10次的时间是:  130毫秒
count58列10次的时间是:  130毫秒
count59列10次的时间是:  130毫秒
count60列10次的时间是:  130毫秒
count61列10次的时间是:  130毫秒
count62列10次的时间是:  140毫秒
count63列10次的时间是:  130毫秒
count64列10次的时间是:  140毫秒
count65列10次的时间是:  130毫秒
count66列10次的时间是:  130毫秒
count67列10次的时间是:  140毫秒
count68列10次的时间是:  130毫秒
count69列10次的时间是:  140毫秒
count70列10次的时间是:  140毫秒
count71列10次的时间是:  140毫秒
count72列10次的时间是:  140毫秒
count73列10次的时间是:  140毫秒
count74列10次的时间是:  150毫秒
count75列10次的时间是:  140毫秒
count76列10次的时间是:  140毫秒
count77列10次的时间是:  140毫秒
count78列10次的时间是:  140毫秒
count79列10次的时间是:  140毫秒
count80列10次的时间是:  150毫秒
count81列10次的时间是:  140毫秒
count82列10次的时间是:  160毫秒
count83列10次的时间是:  150毫秒
count84列10次的时间是:  140毫秒
count85列10次的时间是:  150毫秒
count86列10次的时间是:  150毫秒
count87列10次的时间是:  150毫秒
count88列10次的时间是:  140毫秒
count89列10次的时间是:  150毫秒
count90列10次的时间是:  150毫秒
count91列10次的时间是:  150毫秒
count92列10次的时间是:  160毫秒
count93列10次的时间是:  140毫秒
count94列10次的时间是:  160毫秒
count95列10次的时间是:  150毫秒
count96列10次的时间是:  150毫秒
count97列10次的时间是:  150毫秒
count98列10次的时间是:  160毫秒
count99列10次的时间是:  160毫秒
count100列10次的时间是:  150毫秒
count101列10次的时间是:  160毫秒
count102列10次的时间是:  150毫秒
count103列10次的时间是:  160毫秒
count104列10次的时间是:  150毫秒
count105列10次的时间是:  170毫秒
count106列10次的时间是:  150毫秒
count107列10次的时间是:  160毫秒
count108列10次的时间是:  160毫秒
count109列10次的时间是:  160毫秒
count110列10次的时间是:  160毫秒
count111列10次的时间是:  160毫秒
count112列10次的时间是:  170毫秒
count113列10次的时间是:  160毫秒
count114列10次的时间是:  170毫秒
count115列10次的时间是:  180毫秒
count116列10次的时间是:  160毫秒
count117列10次的时间是:  170毫秒
count118列10次的时间是:  160毫秒
count119列10次的时间是:  170毫秒
count120列10次的时间是:  170毫秒
count121列10次的时间是:  180毫秒
count122列10次的时间是:  170毫秒
count123列10次的时间是:  170毫秒
count124列10次的时间是:  170毫秒
count125列10次的时间是:  170毫秒
count126列10次的时间是:  170毫秒
count127列10次的时间是:  170毫秒
count128列10次的时间是:  170毫秒
count129列10次的时间是:  170毫秒
count130列10次的时间是:  180毫秒
count131列10次的时间是:  170毫秒
count132列10次的时间是:  170毫秒
count133列10次的时间是:  180毫秒
count134列10次的时间是:  170毫秒
count135列10次的时间是:  180毫秒
count136列10次的时间是:  180毫秒
count137列10次的时间是:  170毫秒
count138列10次的时间是:  180毫秒
count139列10次的时间是:  180毫秒
count140列10次的时间是:  180毫秒
count141列10次的时间是:  180毫秒
count142列10次的时间是:  180毫秒
count143列10次的时间是:  180毫秒
count144列10次的时间是:  180毫秒
count145列10次的时间是:  180毫秒
count146列10次的时间是:  180毫秒
count147列10次的时间是:  190毫秒
count148列10次的时间是:  180毫秒
count149列10次的时间是:  180毫秒
count150列10次的时间是:  190毫秒
count151列10次的时间是:  180毫秒
count152列10次的时间是:  190毫秒
count153列10次的时间是:  180毫秒
count154列10次的时间是:  190毫秒
count155列10次的时间是:  190毫秒
count156列10次的时间是:  190毫秒
count157列10次的时间是:  190毫秒
count158列10次的时间是:  210毫秒
count159列10次的时间是:  200毫秒
count160列10次的时间是:  190毫秒
count161列10次的时间是:  210毫秒
count162列10次的时间是:  190毫秒
count163列10次的时间是:  200毫秒
count164列10次的时间是:  200毫秒
count165列10次的时间是:  190毫秒
count166列10次的时间是:  210毫秒
count167列10次的时间是:  190毫秒
count168列10次的时间是:  210毫秒
count169列10次的时间是:  200毫秒
count170列10次的时间是:  200毫秒
count171列10次的时间是:  200毫秒
count172列10次的时间是:  200毫秒
count173列10次的时间是:  210毫秒
count174列10次的时间是:  210毫秒
count175列10次的时间是:  200毫秒
count176列10次的时间是:  200毫秒
count177列10次的时间是:  220毫秒
count178列10次的时间是:  200毫秒
count179列10次的时间是:  210毫秒
count180列10次的时间是:  210毫秒
count181列10次的时间是:  210毫秒
count182列10次的时间是:  200毫秒
count183列10次的时间是:  210毫秒
count184列10次的时间是:  200毫秒
count185列10次的时间是:  200毫秒
count186列10次的时间是:  210毫秒
count187列10次的时间是:  200毫秒
count188列10次的时间是:  210毫秒
count189列10次的时间是:  210毫秒
count190列10次的时间是:  200毫秒
count191列10次的时间是:  240毫秒
count192列10次的时间是:  210毫秒
count193列10次的时间是:  210毫秒
count194列10次的时间是:  200毫秒
count195列10次的时间是:  210毫秒
count196列10次的时间是:  210毫秒
count197列10次的时间是:  210毫秒
count198列10次的时间是:  220毫秒
count199列10次的时间是:  210毫秒
count200列10次的时间是:  210毫秒
count201列10次的时间是:  220毫秒
count202列10次的时间是:  210毫秒
count203列10次的时间是:  220毫秒
count204列10次的时间是:  210毫秒
count205列10次的时间是:  220毫秒
count206列10次的时间是:  210毫秒
count207列10次的时间是:  220毫秒
count208列10次的时间是:  220毫秒
count209列10次的时间是:  210毫秒
count210列10次的时间是:  220毫秒
count211列10次的时间是:  220毫秒
count212列10次的时间是:  220毫秒
count213列10次的时间是:  220毫秒
count214列10次的时间是:  220毫秒
count215列10次的时间是:  220毫秒
count216列10次的时间是:  220毫秒
count217列10次的时间是:  230毫秒
count218列10次的时间是:  220毫秒
count219列10次的时间是:  220毫秒
count220列10次的时间是:  230毫秒
count221列10次的时间是:  220毫秒
count222列10次的时间是:  230毫秒
count223列10次的时间是:  230毫秒
count224列10次的时间是:  220毫秒
count225列10次的时间是:  230毫秒
count226列10次的时间是:  220毫秒
count227列10次的时间是:  230毫秒
count228列10次的时间是:  230毫秒
count229列10次的时间是:  230毫秒
count230列10次的时间是:  230毫秒
count231列10次的时间是:  230毫秒
count232列10次的时间是:  230毫秒
count233列10次的时间是:  230毫秒
count234列10次的时间是:  230毫秒
count235列10次的时间是:  230毫秒
count236列10次的时间是:  250毫秒
count237列10次的时间是:  230毫秒
count238列10次的时间是:  240毫秒
count239列10次的时间是:  230毫秒
count240列10次的时间是:  240毫秒
count241列10次的时间是:  230毫秒
count242列10次的时间是:  240毫秒
count243列10次的时间是:  240毫秒
count244列10次的时间是:  230毫秒
count245列10次的时间是:  240毫秒
count246列10次的时间是:  240毫秒
count247列10次的时间是:  230毫秒
count248列10次的时间是:  240毫秒
count249列10次的时间是:  240毫秒
count250列10次的时间是:  250毫秒
count251列10次的时间是:  240毫秒
count252列10次的时间是:  240毫秒
count253列10次的时间是:  240毫秒
count254列10次的时间是:  240毫秒
count255列10次的时间是:  250毫秒
count256列10次的时间是:  240毫秒
count257列10次的时间是:  240毫秒
count258列10次的时间是:  580毫秒
count259列10次的时间是:  250毫秒
count260列10次的时间是:  240毫秒
count261列10次的时间是:  250毫秒
count262列10次的时间是:  260毫秒
count263列10次的时间是:  330毫秒
count264列10次的时间是:  250毫秒
count265列10次的时间是:  240毫秒
count266列10次的时间是:  260毫秒
count267列10次的时间是:  250毫秒
count268列10次的时间是:  250毫秒
count269列10次的时间是:  250毫秒
count270列10次的时间是:  250毫秒
count271列10次的时间是:  250毫秒
count272列10次的时间是:  250毫秒
count273列10次的时间是:  250毫秒
count274列10次的时间是:  260毫秒
count275列10次的时间是:  250毫秒
count276列10次的时间是:  260毫秒
count277列10次的时间是:  250毫秒
count278列10次的时间是:  270毫秒
count279列10次的时间是:  250毫秒
count280列10次的时间是:  260毫秒
count281列10次的时间是:  260毫秒
count282列10次的时间是:  260毫秒
count283列10次的时间是:  250毫秒
count284列10次的时间是:  260毫秒
count285列10次的时间是:  260毫秒
count286列10次的时间是:  260毫秒
count287列10次的时间是:  280毫秒
count288列10次的时间是:  260毫秒
count289列10次的时间是:  270毫秒
count290列10次的时间是:  260毫秒
count291列10次的时间是:  260毫秒
count292列10次的时间是:  260毫秒
count293列10次的时间是:  270毫秒
count294列10次的时间是:  260毫秒
count295列10次的时间是:  260毫秒
count296列10次的时间是:  270毫秒
count297列10次的时间是:  270毫秒
count298列10次的时间是:  260毫秒
count299列10次的时间是:  260毫秒
count300列10次的时间是:  270毫秒

可以看到当表的字段多的时候,还是有很大差别的,越前面的字段,速度越快,这是因为在ORACLE中,字段信息分三部分存储:
1、字段头信息
2、字段长度
3、指定字段内容
当查询指定列时,ORACLE无法直接找到指定列,而是从第1列开始,通过记录的头信息以及字段长度一个个计算出来的,越后面的字段,计算的次数就越多,所以在实际应用中尽量将常用的字段放在前面。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25285600/viewspace-773444/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25285600/viewspace-773444/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值