最近在调数据迁移的性能, 其中有下面这样的一句SQL语句, 表的大小为25GB, 记录数为1亿.
INSERT /*+ APPEND */ INTO B
SELECT /*+ PARALLEL(A,4) FULL(A) */
SEQ_B.NEXTVAL, A.*
FROM A;
这一步在很好的存贮及主机上测试时, 居然用了26分钟, 忍无可忍, 一定要调整一下. 仔细考虑了一下, 因应是序列的取下个值太慢的问题, 序列原来的CACHE值为20, 于是将脚本改成如下:
ALTER SEQUENCE SEQ_B CACHE 2000;
INSERT /*+ APPEND */ INTO B
SELECT /*+ PARALLEL(A,4) FULL(A) */
SEQ_B.NEXTVAL, A.*
FROM A;
ALTER SEQUENCE SEQ_B CACHE 20;
这样改了后, 10分钟就完成了, 有效地节约了15分钟.