我想用oracle
一次插入1000行示例:
INSERT INTO MSG(AUTHOR)
SELECT AUTHOR FROM oldDB.MSGLOG
这个插入需要很长时间,但如果我用ROWNUM< = 1000限制它,它会立即插入,所以我想创建一个导入,通过我的X行数并在时间插入1000。 / p>
由于
答案 0 :(得分:1)
令人怀疑的是,这会真正提高性能,特别是考虑到SELECT
语句的简单性。这必须是对表格或author
上的索引进行全面扫描。如果扫描速度很慢,那么你在诊断潜在问题方面要好得多,而不是试图解决它(例如,oldDB.MsgLog
可能会在高水位线下面有一些空块,强制进行全表扫描阅读比绝对必要的更多的块。
如果你真的想写一些更冗长,效率更低的PL / SQL来完成任务,你当然可以
DECLARE
TYPE tbl_authors IS TABLE OF msg.author%TYPE;
l_authors tbl_authors;
CURSOR author_cursor
IS SELECT author
FROM oldDB.MsgLog;
BEGIN
OPEN author_cursor;
LOOP
FETCH author_cursor
BULK COLLECT INTO l_authors
LIMIT 1000;
EXIT WHEN l_authors.count = 0;
FORALL i IN 1..l_authors.count
INSERT INTO msg( author )
VALUES( l_authors(i) );
END LOOP;
END;