我有一个包含大约 500 万条记录的表。在特定的一天,我们将这些记录从源表传输到目标表。唯一的列区别是目标表有一个序列列。为此,我创建了一个缓存为 10000 的序列。插入查询将如下所示:
insert into target select seq_name.nextval, * from source;
添加序列后,上述语句需要 2 分钟才能完成。我尝试了其他几种方法,例如首先将记录添加到目标表,然后更新序列或稍后使用合并来更新序列。但总是需要更多时间。
还有其他方法可以提高插入查询的性能吗?
怎么样
insert into target
select ROWNUM, s.* from source s;
然后,如果您要向其中添加更多行,请创建一个以(当前)
MAX + 1
序列列的值开始的序列。
此外,您宁愿指定要选择和从中提取的列,不要使用
*
通配符,因为最佳实践。