在做开发的时候或者设计表的时候,基本上都不考虑字段顺序的问题,其实字段的顺序是对性能有影响的。
这里通过一个实验来说明:
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/