May be the problem is not the insert but the select statement that feeds the insert.

Is this a set based insert or is it a cursor based a.k.a. row-by-row one?