Chinaunix首页 | 论坛 | 博客
  • 博客访问: 952537
  • 博文数量: 80
  • 博客积分: 2380
  • 博客等级: 大尉
  • 技术积分: 1049
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-14 11:06
个人简介

Only to find a successful way, not to find excuses for failure!

文章分类

全部博文(80)

文章存档

2016年(2)

2015年(4)

2014年(10)

2013年(10)

2012年(7)

2011年(17)

2010年(30)

分类: Oracle

2015-04-10 14:56:07

由于公司项目上一些事情,我想测试一下1亿条记录的表,到底有多大。
1.创建表

  1. create table smmaidy(data_sj number,rcd number,seq number,mode_ms varchar(16),mainacctid varchar2(256),
  2. loginname varchar2(64),username varchar2(32),valid char(1),lockstatus char(1),accttype varchar2(32),
  3. rolelist varchar2(500),effecttime timestamp,expiretime timestamp,establishtime timestamp,areaid varchar2(10),
  4. orgid varchar2(10),orgname varchar2(500),updatetime timestamp,flag char(1),orderid varchar2(64)
  5. );
2.建个序列
这个最好用plsql鼠标点点创建,方便。
  1. create sequence SEQ_SCAP
  2. minvalue 0
  3. maxvalue 999999999999999999999
  4. start with 4634201
  5. increment by 1
  6. cache 20;
3.创建存储过程循环插入
好久不写了,之前写的代码也都丢失了,居然没保存回来,看来博客这东西,还是有点用的,所以顺便也从百度贴回来了以前曾经写的几个小程序,忘记语法什么的,最好看PLSQL_primary.pdf这个文件。
  1. create or replace procedure pro_smmai(nu in number) is
  2. --i number:=1;
  3. begin
  4.   for i in 1..nu loop
  5.     insert into smmaidy values(1,1,seq_scap.nextval,'模式','mainacctid-dfafadfaffadfafafafa',
  6. 'xichubawang','kaige','1','1','32fdafdafadfafadfafa','文件头格式参见两级接口规则的5.2.4节,此处只定义数据记录部分的格式',
  7. sysdate,sysdate,sysdate,'10fdafa','10fdadf','组织全路径名称。即从根节点到当前节点的完整路径,节点用“-”分隔。
  8. 举例:某移动-某地市分公司-某县市分公司-某营业厅',sysdate,'0','工单/公文号');
  9. end loop;
  10. commit;
  11. end pro_smmai;
4.测试
先插1w条数据试试,由于我之前建表之后测试,插了两条,所以是10002。如果拼写错误,记得看命令行提示,我看到之后,居然去检查程序去了。。。
  1. Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
  2. Connected as yk@GLOBALYK

  3. SQL> set serveroutput on size 9999;
  4. SQL> set time on;
  5. 20:28:52 SQL> set timing on;
  6. 20:29:06 SQL> select sysdate from dual;
  7. SYSDATE
  8. -----------
  9. 2015-3-30 2
  10. Executed in 0 seconds

  11. 20:29:13 SQL> set linesize 9999;
  12. 20:29:58 SQL> exec pro_smmail(10000);
  13. begin pro_smmail(10000); end;
  14. ORA-06550: 第 1 行, 第 7 列:
  15. PLS-00201: 必须声明标识符 'PRO_SMMAIL' 
  16. ORA-06550: 第 1 行, 第 7 列:
  17. PL/SQL: Statement ignored

  18. 20:31:13 SQL> exec pro_smmai(10000);
  19. PL/SQL procedure successfully completed
  20. Executed in 1.25 seconds

  21. 20:32:09 SQL> select count(*) from smmaidy;
  22.   COUNT(*)
  23. ----------
  24.      10002
  25. Executed in 0.047 seconds

  26. 20:32:47 SQL> delete from smmaidy;
  27. 10002 rows deleted
  28. Executed in 0.109 seconds

  29. 20:33:11 SQL> commit;
  30. Commit complete
  31. Executed in 0 seconds

  32. 20:33:17 SQL>
我执行了测试1亿条,结果执行了1个多小时都没完,无法强制结束,强制关闭数据库,关闭后也异常了,更别提执行的过程中再去执行查询了。。
后来我就测试100w条的效果:

  1. Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
  2. Connected as yk@GLOBALYK

  3. SQL> set serveroutput on;
  4. SQL> set timing on;
  5. SQL> exec pro_smmai(1000000);
  6. PL/SQL procedure successfully completed
  7. Executed in 83.704 seconds

  8. SQL> select count(*) from smmaidy;
  9.   COUNT(*)
  10. ----------
  11.    1000000
  12. Executed in 7.015 seconds

  13. SQL>
  14. 表的大小是:
  15. SQL> select bytes/1024/1024 m from dba_segments where segment_name='SMMAIDY';

             M
    ----------
           496

    SQL>
  16. 建个索引看看效率:
    SQL> select count(seq) from smmaidy;
    COUNT(SEQ)
    ----------
       1000000
    Executed in 0.234 seconds


    SQL> 

我这个双核的电脑,看来跑百万条记录、没索引的情况下,还凑合吧。















阅读(1355) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

lyhabc2015-04-16 08:19:59

太厉害了