sqlplus之 big_table
扫描二维码
随时随地手机看文章
根据all_objects创建一个空表,这个字典视图用于填充big_table
create table big_table as select rownum id, a.* from all_objects a where 1=0 /
置这个表为NOLOGGING,为了提高性能。对于测试表使用NOLOGGING模式是安全的。
由于生产系统不会使用这样一个测试表,所以不会启用诸如oracle data guard之类的特性
alter table big_table nologging;
用all_objects的内容填充表,然后迭代的插入其自身中,每次迭代会使表大小几乎加倍。
declare l_cnt number; l_rows number := &1; begin insert /*+ APPEND */ into big_table select rownum id, a.* from all_objects a; l_cnt := sql%rowcount; commit; while (l_cnt < l_rows) loop insert /*+ APPEND */ into big_table select rownum+l_cnt id, OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, GENERATED, SECONDARY, NAMESPACE, EDITION_NAME from big_table where rownum <= l_rows-l_cnt; l_cnt := l_cnt + sql%rowcount; commit; end loop; end; /
对这个表创建一个主键约束。
alter table big_table add constraint big_table_pk primary key(id) /
收集统计结果
begin dbms_stats.gather_table_stats ( ownname => 'scott', tabname => 'BIG_TABLE', method_opt => 'for all indexed columns', cascade => TRUE ); end; /
显示表中的行数
select count(*) from big_table;
结果:
scott@ORCL>@D:appAdministratorproduct11.2.0big_table.sql; 表已创建。 表已更改。 输入 1 的值: 100000 原值 3: l_rows number := &1; 新值 3: l_rows number := 100000; PL/SQL 过程已成功完成。 表已更改。 PL/SQL 过程已成功完成。 COUNT(*) ---------- 100000