123
返回列表 发新帖
楼主: yuonunix

请问以下结论是否成立

[复制链接]
论坛徽章:
0
21#
 楼主| 发表于 2007-4-4 16:08 | 只看该作者
为什么两次测试结果完全不同,建议再做第三次测试:

一次测试,500 个字段明显变慢
500 个字段,而一个block最多只能存放 255个字段,这样即使你数据不超过4k也会被放到两个block中去。 然后新插入的数据再去共用block…… 这样慢也是有道理的。

第二次测试,其实差距并不是很大。

使用道具 举报

回复
论坛徽章:
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
22#
发表于 2007-4-5 12:55 | 只看该作者
最初由 yuonunix 发布
[B]为什么两次测试结果完全不同,建议再做第三次测试:

一次测试,500 个字段明显变慢
500 个字段,而一个block最多只能存放 255个字段,这样即使你数据不超过4k也会被放到两个block中去。 然后新插入的数据再去共用block…… 这样慢也是有道理的。

第二次测试,其实差距并不是很大。 [/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
23#
发表于 2007-4-5 12:58 | 只看该作者
最初由 bluemoon0083 发布
[B]存储上差异跟你的pct_free,db_block_size以及row的长度有关 [/B]



select *  from dba_tablespaces where tablespace_name='BLOB_TS';

           TABLESPACE_NAME        BLOCK_SIZE        INITIAL_EXTENT        NEXT_EXTENT        MIN_EXTENTS        MAX_EXTENTS        PCT_INCREASE        MIN_EXTLEN        STATUS        CONTENTS        LOGGING        FORCE_LOGGING        EXTENT_MANAGEMENT        ALLOCATION_TYPE        PLUGGED_IN        SEGMENT_SPACE_MANAGEMENT        DEF_TAB_COMPRESSION
1        BLOB_TS        8192        1048576        1048576        1        2147483645        0        1048576        ONLINE        PERMANENT        LOGGING        NO        LOCAL        UNIFORM        NO        MANUAL        DISABLED

行的长度是:字段个数*length('abcdefg')

使用道具 举报

回复
论坛徽章:
42
秀才
日期:2016-02-18 10:08:142011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:帆船
日期:2010-12-01 14:44:522010广州亚运会纪念徽章:壁球
日期:2010-11-22 15:43:03ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010世博会纪念徽章
日期:2010-08-27 12:47:062010年世界杯参赛球队:意大利
日期:2010-06-12 16:57:152010年世界杯参赛球队:朝鲜
日期:2010-05-14 15:03:152010年世界杯参赛球队:法国
日期:2010-03-26 12:47:30ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
24#
发表于 2007-4-8 22:31 | 只看该作者
最初由 biti_rainy 发布
[B]500 个字段,而一个block最多只能存放 255个字段,这样即使你数据不超过4k也会被放到两个block中去。 然后新插入的数据再去共用block…… 这样慢也是有道理的。 [/B]



大师,这个地方似乎有点不对吧
我记得是8.0不支持一个表超过255个字段.
在8.0以后的版本有所改进,可以超过255字段,但是由于在底层存放列数的位置只有一个字节,所以如果超过255个字段,会作块内行迁移,而并不是一定会放到两个块中去吧?
(这段内容是在DSI 302的data space management中讲述的,不知道是不是我理解错了)

使用道具 举报

回复
论坛徽章:
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
25#
发表于 2007-4-10 16:57 | 只看该作者
我顶,是为了学习。

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2007-4-13 10:52 | 只看该作者
我的测试结果:
25个字段*400000行记录, 182秒
250个字段*40000行记录, 87秒
250个字段的速度是25个字段的速度的2倍。
cjf107,你的测试不准吧。

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2007-4-13 10:54 | 只看该作者
关注,关注

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
28#
发表于 2007-4-13 16:22 | 只看该作者
发现一个问题,你在插入时并没有用到批量插入哦
Bulk insert !!!

再测试一遍?

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
29#
发表于 2007-4-13 17:02 | 只看该作者
在不使用Bulk的情况下,insert 同样的数据量,250 colunm的效率差不多等于 25colunm的 4-5倍,但是,25colunm 的使用了 Bulk insert ,使它的执行次数等于 250 colunm之后,效率非常接近

250 colunm * 1000 times = 450 ms
25 column * 10000 times = 2000 ms
(25 colunm * 10 Bulk) * 1000 times = 490 ms

速度差异的关键在于SQL 引擎于PL/SQL引擎的切换上


[php]
-- Create table test250
DECLARE
sql_text VARCHAR2(4096);
BEGIN
sql_text := 'create table test250 (';
FOR i IN 1..249 LOOP
sql_text := sql_text ||' c'||i||' char(9),' ;
Dbms_Output.put_line(Length(sql_text)||' '||i);
END LOOP;
sql_text := sql_text ||' col250 char(9))';
EXECUTE IMMEDIATE sql_text;
END;
/


-- Create table test25
DECLARE
sql_text VARCHAR2(4096);
BEGIN
sql_text := 'create table test25 (';
FOR i IN 1..24 LOOP
sql_text := sql_text ||' c'||i||' char(9),' ;
Dbms_Output.put_line(Length(sql_text)||' '||i);
END LOOP;
sql_text := sql_text ||' col25 char(9))';
EXECUTE IMMEDIATE sql_text;
END;
/

--insert into test250 1000 rows
BEGIN
FOR i IN 0..1000 loop
INSERT INTO test250 VALUES
(
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a',
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'
);
END LOOP;
END;
/

--insert into test25 10000 rows ,without bulk insert
BEGIN
FOR i IN 0..10000 loop
INSERT INTO test25 VALUES
(
'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a'
);
END LOOP;
END;
/


--insert into test25 10000 rows ,with bulk insert  ,execute 1000 times
DECLARE
  type char_Table is table of char(9) index by binary_integer;
a char_table;
BEGIN
FOR i IN 0 ..10 loop
a(i) :='a';
END LOOP;
FOR i IN 0..1000 LOOP
FORALL i IN 0..10
INSERT INTO test25 VALUES
(
a(i), a(i), a(i), a(i), a(i),
a(i), a(i), a(i), a(i), a(i),
a(i), a(i), a(i), a(i), a(i),
a(i), a(i), a(i), a(i), a(i),
a(i), a(i), a(i), a(i), a(i)
);
END LOOP;
END;
/

...
[/php]

使用道具 举报

回复

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

本版积分规则 发表回复

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