【Oracle】利用笛卡尔积制作含有一千六百万条记录的表 精简版

前作:https://www.cnblogs.com/heyang78/p/12496028.html 里谈到了如何用笛卡尔积来创建一千陆佰万大表,但过程还可以更短些,现总结如下:

1.准备基本表

create table emp(
id int,
name nvarchar2(20),
age int,
salary int,
create_time timestamp default sysdate,
primary key(id))

 

2.给基本表塞入四千条数据。

insert into emp
    select rownum,
            dbms_random.string('*',dbms_random.value(6,20)),
        dbms_random.value(18,65),
            dbms_random.value(1000,50000),
        sysdate
    from dual
    connect by level<4001

 

3.以基本表为基础创建辅助表。

CREATE TABLE emp2 as select * from emp;

 

4.使用基本表和辅助表生成的笛卡尔积生成一千六百万大表。

create table emp_final as select a.* from emp a cross join emp2 b;

到这里,大表就形成了,花的时间不长,如果要把主键规整好请继续往下看。

 

5.规整主键。

update emp_final set id=rownum where 1=1;

这一步耗的时间比第四步长。

 

6.设定主键。

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

至此一个完整的一千六百万大表就完成了,在我的t440p机器上,基本能控制在25分之内。

-END-

posted @ 2021-09-07 19:11  逆火狂飙  阅读(186)  评论(1编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东