楼主: yuonunix

请问以下结论是否成立

[复制链接]
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
11#
发表于 2007-4-3 16:18 | 只看该作者
下午pub在系统升级吗?很久都连不上。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
12#
发表于 2007-4-3 16:32 | 只看该作者
最初由 cjf107 发布
[B]“而一个block最多只能存放 255个字段”
这是对哪个版本的? [/B]


哪个版本都一样。先天数据格式决定了这样。

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
13#
发表于 2007-4-3 16:42 | 只看该作者
谢谢biti_rainy,那我再测试一下25和250。

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
14#
发表于 2007-4-3 17:04 | 只看该作者
以下是对25*200000和250*20000的测试情况:
create table test250 (col1 varchar2(10),
col2 varchar2(10),
.........
col249 varchar2(10),
col250 varchar2(10))  tablespace blob_ts;

create table test25 (col1 varchar2(10),
col2 varchar2(10),
.........
col24 varchar2(10),
col25 varchar2(10)) tablespace blob_ts;


SQL> set timing on ;
SQL> spool /home/oracle/cjf25and250.log
SQL> begin
for i in 1..20000
loop
insert into test250 values('abcdefg',
'abcdefg',
'abcdefg',
........
'abcdefg',
'abcdefg',
'abcdefg');
end loop;
end;
/

PL/SQL procedure successfully completed.

Elapsed: 00:01:34.27
SQL> commit;

Commit complete.

Elapsed: 00:00:00.09
SQL>

begin
for i in 1..200000
loop
insert into test25 values('abcdefg',
'abcdefg',
'abcdefg',
.........
'abcdefg',
'abcdefg');
end loop;
end;
/

PL/SQL procedure successfully completed.

Elapsed: 00:01:56.05
SQL> commit;

Commit complete.

Elapsed: 00:00:00.01
SQL>
SQL> select segment_name,tablespace_name,bytes,blocks,extents from user_segments
where segment_name in (upper('test250'),upper('test25'));

SEGMENT_NAME        TABLESPACE_NAME        BYTES        BLOCKS        EXTENTS
TEST250        BLOB_TS        55574528        6784        53
TEST25        BLOB_TS        47185920        5760        45

SQL> select count(*) from test25;
select count(*) from test250;


  COUNT(*)
----------
    200000

Elapsed: 00:00:33.04
SQL>

  COUNT(*)
----------
     20000

Elapsed: 00:00:55.22
SQL> SQL>

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
15#
发表于 2007-4-3 17:06 | 只看该作者
结果是:
TEST250: 250个字段*20000:花了01:34.27
TEST25: 25个字段*200000:花了01:56.05
而段的大小情况如下:
TEST250 BLOB_TS 55574528 6784 53
TEST25 BLOB_TS 47185920 5760 45

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
16#
发表于 2007-4-3 17:11 | 只看该作者
从25,50,250,500个字段情况的比较来看:
空间占用情况:字段数越多,占用的extents也就越多(250和500个字段时一样大);
插入时间情况:50个字段对应的时间最少,字段数越多则越长,很小的话也会很长。(是不是字段数和行数折中最好呢?)

当然这些都是这两次测试后的表面情况。

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
17#
发表于 2007-4-3 17:38 | 只看该作者
以下是我将4个表都truncate后重新测试的过程:
begin
for i in 1..20000
loop
insert into test250 values('abcdefg',
........
'abcdefg',
'abcdefg');
end loop;
end;
/

PL/SQL procedure successfully completed.

Elapsed: 00:00:59.04
SQL> commit;

Commit complete.

Elapsed: 00:00:00.02
SQL>

begin
for i in 1..200000
loop
insert into test25 values('abcdefg',
.......
'abcdefg');
end loop;
end;
/

PL/SQL procedure successfully completed.

Elapsed: 00:01:02.85
SQL> commit;

Commit complete.

Elapsed: 00:00:00.04
SQL>
SQL> begin
for i in 1..10000
loop
insert into test500 values('abcdefg',
..........
'abcdefg');
end loop;
end;
/

PL/SQL procedure successfully completed.

Elapsed: 00:01:10.91
SQL> commit;

Commit complete.

Elapsed: 00:00:00.13
SQL>
begin
for i in 1..100000
loop
insert into test50 values('abcdefg',
.....
'abcdefg');
end loop;
end;
/

PL/SQL procedure successfully completed.

Elapsed: 00:01:07.55
SQL> commit;

Commit complete.

Elapsed: 00:00:00.01
SQL>
SQL> col SEGMENT_NAME format a10
col TABLESPACE_NAME format a10
select segment_name,tablespace_name,bytes,blocks,extents from user_segments
where segment_name in (upper('test25'),upper('test50'),upper('test250'),upper('test500'))
order by segment_name;

SEGMENT_NA TABLESPACE      BYTES     BLOCKS    EXTENTS
---------- ---------- ---------- ---------- ----------
TEST25     BLOB_TS      47185920       5760         45
TEST250    BLOB_TS      55574528       6784         53
TEST50     BLOB_TS      48234496       5888         46
TEST500    BLOB_TS      55574528       6784         53

Elapsed: 00:00:01.54
SQL>

SQL> select count(*) from test25;
select count(*) from test50;
select count(*) from test250;
select count(*) from test500;

  COUNT(*)
----------
    200000

Elapsed: 00:00:40.07
SQL>
  COUNT(*)
----------
    100000

Elapsed: 00:00:49.30
SQL>

  COUNT(*)
----------
     20000

Elapsed: 00:00:59.27
SQL>

  COUNT(*)
----------
     10000

Elapsed: 00:00:49.96
SQL>

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
18#
发表于 2007-4-3 17:42 | 只看该作者
结果是:
TEST25:  25个字段*200000:花了01:02.85 ,查询行数的时间为00:40.07
TEST50:  50个字段*100000:花了01:07.55 ,查询行数的时间为00:49.30
TEST250: 250个字段*20000:花了00:59.04 ,查询行数的时间为00:59.27
TEST500: 500个字段*10000:花了01:10.91 ,查询行数的时间为00:49.96

而段的大小情况如下:
SEGMENT_NA TABLESPACE      BYTES     BLOCKS    EXTENTS
---------- ---------- ---------- ---------- ----------
TEST25     BLOB_TS      47185920       5760         45
TEST250    BLOB_TS      55574528       6784         53
TEST50     BLOB_TS      48234496       5888         46
TEST500    BLOB_TS      55574528       6784         53

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
19#
发表于 2007-4-3 17:45 | 只看该作者
其实差距并不是很大,跟我原来的关于插入时间的结论不一样。
所以对哪个最优也就说不上来了,而存储上的差异是原理是什么也就不清楚了。
还是等biti_rainy来解惑了。

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
20#
发表于 2007-4-4 11:45 | 只看该作者
存储上差异跟你的pct_free,db_block_size以及row的长度有关

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表