ITPub博客

首页 > Linux操作系统 > Linux操作系统 > big_table的若干种创建脚本

big_table的若干种创建脚本

原创 Linux操作系统 作者:ptjungle 时间:2010-10-29 15:08:52 0 删除 编辑

引用TOM大师《性能优化》


创建普通Big_Table:

根据ALL_OBJECTS创建一个空表。
置Big_Table为NOLOGGING。
用ALL_OBJECTS的内容填充表。
对Big_Table创建一个主键约束。
收集统计结果。
显示表中的行数。
脚本Big_Table.SQL如下:

CREATE TABLE Big_Table   
AS
SELECT ROWNUM ID,   
         ao.*   
    FROM All_Objects ao   
   WHERE 1 = 0;   

ALTER TABLE Big_Table NOLOGGING;   

DECLARE
l_Cnt NUMBER;   
l_Rows NUMBER := ?   
BEGIN
INSERT /*+ APPEND */   
    INTO Big_Table   
SELECT ROWNUM,   
         ao.*   
    FROM All_Objects ao;   
       
l_Cnt := SQL%ROWCOUNT;   
     
COMMIT;   
     
WHILE(l_Cnt < l_Rows)   
LOOP   
    INSERT /*+ APPEND */   
      INTO Big_Table   
    SELECT ROWNUM + l_Cnt,   
           ao.*   
      FROM All_Objects ao   
     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    => User,   
                                TabName    => 'BIG_TABLE',   
                                Method_Opt => 'for all indexed columns',   
                                CASCADE    => TRUE);   
END;   
/   


SELECT COUNT(*)
FROM Big_Table;

eg:创建一个1000000条记录的表:

view plaincopy to clipboardprint?
MUZIYU@MYDB> @D:\SQL\Big_Table.SQL;   

表已创建。   


表已更改。   

输入 1 的值: 1000000   
原值    3:   l_Rows NUMBER := ?   
新值    3:   l_Rows NUMBER := 1000000;   

PL/SQL 过程已成功完成。   


表已更改。   


PL/SQL 过程已成功完成。   


COUNT(*)   
----------   
1000000

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23567090/viewspace-677067/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-03-30

  • 博文量
    3
  • 访问量
    3709