Y a todo esto, ¿de cuántos registros estamos hablando? Digo, porque si son millones de registros quizá sea lo normal. Ahora, yo no trabajo con IB y mucho menos con Informix pero de entrada se me ocurriría desactivar cualquier índice que tenga la tabla destino durante la transferencia. Otro punto que podría ayudar algo es no utilizar variants
Código Delphi
[-]
tabla2.fields[i].value := tabla1.fields[i].asVariant;
Ya sé que así parece muy cómodo porque pueden procesarse los campos en un ciclo, pero los variants siempre va a alentar un poco y si se trata de muchos registros, la diferencia podría ser notable. Así que mejor usar
Código Delphi
[-]
tabla2.FieldByName('campo').AsInteger := tabla2.FieldByName('campo').AsInteger;
Según el tipo de datos que tenga el campo, usarán AsInteger, AsString, AsFloat, etc.
Más no se me ocurre por ahora.
// Saludos