【Oracle】如何快速创建一千六百万大表

【数据库版本】Oracle11g

【硬件】Thinkpadt440p

 

以下是详细步骤,其中主键规整设定两步可以按需求调整。

 

【建初始表 秒出】

create table emp_init(
    id number(12),
    name varchar2(20),
    age number(3),
    salary number(6),
    create_time timestamp default sysdate,
    remark nvarchar2(100),
primary key(id))

【初始表充值 秒出】

复制代码
insert into emp_init
    select rownum,
            dbms_random.string('*',dbms_random.value(6,20)),
            dbms_random.value(18,65),
            dbms_random.value(1000,50000),
            sysdate,
        dbms_random.string('*',dbms_random.value(10,100))
    from dual
    connect by level<4001
复制代码

【以初始表为基础创建辅助表 秒出】

CREATE TABLE emp_bk as select * from emp_init;

【利用笛卡儿积生成一千六百万大表 耗时一分钟】

create table emp_final as select a.* from emp_init a cross join emp_bk b;

至此的步骤耗时不多,往下就进入了耗时环节。 

注意,如果不用这种方式,而直接采用connect by level<16000001的话,会遇到ORA-30009:connect by 操作内存不足的错误。

 

【规整主键 耗时约26分钟】

update emp_final set id=rownum where 1=1;

 【设定主键 耗时约两分钟】

ALTER TABLE emp_final ADD CONSTRAINT emp_final_pk PRIMARY KEY (id);

 一千六百万大表至此创建完毕,整体耗时约半小时。

 

以下是完整记录:

复制代码
SQL> create table emp_init(
  2  id number(12),
  3  name varchar2(20),
  4  age number(3),
  5  salary number(6),
  6  create_time timestamp default sysdate,
  7  remark nvarchar2(100),
  8  primary key(id));

表已创建。

已用时间:  00: 00: 00.01
SQL> insert into emp_init
  2      select rownum,
  3              dbms_random.string('*',dbms_random.value(6,20)),
  4              dbms_random.value(18,65),
  5              dbms_random.value(1000,50000),
  6              sysdate,
  7      dbms_random.string('*',dbms_random.value(10,100))
  8      from dual
  9      connect by level<4001;

已创建4000行。

已用时间:  00: 00: 00.28
SQL> CREATE TABLE emp_bk as select * from emp_init;

表已创建。

已用时间:  00: 00: 00.03
SQL> create table emp_final as select a.* from emp_init a cross join emp_bk b;

表已创建。

已用时间:  00: 00: 58.88
SQL> update emp_final set id=rownum where 1=1;

已更新16000000行。

已用时间:  00: 26: 20.31
SQL> ALTER TABLE emp_final ADD CONSTRAINT emp_final_pk PRIMARY KEY (id);

表已更改。

已用时间:  00: 01: 45.80
SQL>
复制代码

END

posted @   逆火狂飙  阅读(446)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2019-03-09 【Canvas与游戏】Bombman v1.04
2019-03-09 【Canvas与艺术】模拟八一电影制片厂电影片头效果
2019-03-09 【Canvas技法】蓝布底金字北岛诗节选(背景图片、文字阴影示例)
2017-03-09 “阿基里斯与乌龟”的终结性思考
2017-03-09 生活本来的样子
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示