引用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;
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博客 ” ,链接:http://blog.itpub.net/23567090/viewspace-677067/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23567090/viewspace-677067/