Database 在DB2中插入占用大量时间

Database 在DB2中插入占用大量时间,database,triggers,db2,bulkinsert,Database,Triggers,Db2,Bulkinsert,我有一个合并查询,它在满足条件时更新表,如果不满足条件,则将记录插入另一个表中。问题是这种特殊的插入需要很多时间,大约25分钟才能插入15000条记录。我发现,在插入记录的同时,我们还插入了一个序列id,而序列id又是由与其关联的触发器生成的。触发器从2个表中选择max id,因此它向max添加1并返回max,然后由Insert查询使用。 这就是我的存储过程中插入速度较慢的确切原因吗?这个SP在DB2上运行。触发器不是性能的好解决方案。在表上使用自动增量列 瓶颈确实是触发因素。我扣下扳机并运行s

我有一个合并查询,它在满足条件时更新表,如果不满足条件,则将记录插入另一个表中。问题是这种特殊的插入需要很多时间,大约25分钟才能插入15000条记录。我发现,在插入记录的同时,我们还插入了一个序列id,而序列id又是由与其关联的触发器生成的。触发器从2个表中选择max id,因此它向max添加1并返回max,然后由Insert查询使用。
这就是我的存储过程中插入速度较慢的确切原因吗?这个SP在DB2上运行。

触发器不是性能的好解决方案。在表上使用自动增量列

瓶颈确实是触发因素。我扣下扳机并运行sp,最多花2分钟插入大约15k条记录。我现在使用的是序列而不是触发器。

进程可能正在使用逐行处理。查看是否可以找到基于集合的解决方案。查看查询计划将准确地告诉您瓶颈是什么。用这种方式生成序列号通常是一个非常糟糕的主意™, 这不仅是因为性能差,还因为可能存在争用情况。如果DB在表上维护两个索引,bluk插入将花费两倍的时间。50个索引将花费50倍的时间。某些操作系统允许您关闭非唯一索引,直到实际需要索引为止。或者,您从中获取ID的表需要ID上的唯一索引。我会保留30k ID,并以比浪费ID更快的速度完成工作。