【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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需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 生活本来的样子