【Oracle】利用笛卡尔积创建千万级表的全记录
执行语句:
-- tag表结构
create table tag( id number(12), name nvarchar2(20), primary key(id) )
-- tag充值 insert into tag select rownum, dbms_random.String('*',dbms_random.value(6,20)) from dual connect by level<1001
--用户表结构 create table customer( id number(12), name nvarchar2(20), primary key(id) )
--用户表充值 insert into customer select rownum, dbms_random.String('*',dbms_random.value(6,20)) from dual connect by level<20001
--利用笛卡尔积创建连接表 create table customer_tag as select rownum as id,tag.id as tid,customer.id as cid from tag,customer where mod(tag.id,2)=0
--连接表加主键 alter table customer_tag add constraint pk_customer_tag primary key (id);
--连接表设索引 create index idx_tid_cid on customer_tag(tid,cid);
执行记录:
SQL> set timing on; SQL> create table tag( 2 id number(12), 3 name nvarchar2(20), 4 primary key(id) 5 ); 表已创建。 已用时间: 00: 00: 00.01 SQL> insert into tag 2 select rownum, 3 dbms_random.String('*',dbms_random.value(6,20)) 4 from dual 5 connect by level<1001; 已创建 1000 行。 已用时间: 00: 00: 00.08 SQL> commit; 提交完成。 已用时间: 00: 00: 00.00 SQL> create table customer( 2 id number(12), 3 name nvarchar2(20), 4 primary key(id) 5 ); 表已创建。 已用时间: 00: 00: 00.01 SQL> insert into customer 2 select rownum, 3 dbms_random.String('*',dbms_random.value(6,20)) 4 from dual 5 connect by level<20001; 已创建 20000 行。 已用时间: 00: 00: 00.27 SQL> commit; 提交完成。 已用时间: 00: 00: 00.01 SQL> create table customer_tag 2 as 3 select rownum as id,tag.id as tid,customer.id as cid from tag,customer where mod(tag.id,2)=0; 表已创建。 已用时间: 00: 00: 03.91 SQL> select count(*) from customer_tag; COUNT(*) ---------- 10000000 已用时间: 00: 00: 00.10 SQL> alter table customer_tag add constraint pk_customer_tag primary key (id); 表已更改。 已用时间: 00: 00: 03.90 SQL> create index idx_tid_cid on customer_tag(tid,cid); 索引已创建。 已用时间: 00: 00: 04.55 SQL> commit; 提交完成。 已用时间: 00: 00: 00.00 SQL>
END