为什么数据移动期间not logged initially
选项比使用DB2中的LOAD
实用程序更快?
最初未记录方法:
db2 alter table tablename activate not logged initially
db2 insert into table tablename select * from tbname
加载实用程序:
db2 declare source cursor for select * from tablename
db2 load from source of cursor insert into tablename nonrecoverable
答案 0 :(得分:1)
根据您的数据库大小和性能问题,我将假设您正在使用DB2的数据库分区功能(DPF)。
当您执行INSERT INTO ... SELECT
时,这会在所有数据库分区上并行发生 - 每个分区都是独立工作的。关闭日志记录后,这将非常快(虽然很危险 - 如果出现问题,则必须删除并重新创建未记录的初始表。)
当您使用LOAD FROM CURSOR
时,所有数据库分区都会执行SELECT语句并将行返回到协调程序分区,然后协调程序分区将它们提供给LOAD
实用程序。然后,LOAD
实用程序执行散列分区,以再次将数据发送回所有数据库分区。可以想象,对于大量数据,来回传输所有这些数据可能效率很低。