FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
mejorar este proceso
bueno la migracion la estoy haciendo de esta manera tabla por tabla
alguien me puede decir como mejorar el tiempo. porque por tabla me lleva mas o menos 7 minutos. while not tabla1.eof do begin tabla2.Append; for i:=0 to tabla1.fieldcount-1 do begin tabla2.fields[i].value := tabla1.fields[i].asVariant; end; tabla2.Post; tabla1.Next; end; En el AfterPost de la tabla2 hago lo siguiente procedure TModulo.Tabla2AfterPost(DataSet: TDataSet); begin // Confirmamos los cambios y continuamos try tabla2.Transaction.CommitRetaining; Except // Si hay errores, descartamos y seguimos Tabla2.Transaction.RollbackRetaining; End; end; Diganme porfavor en que puedo mejorar, para hacerlo en menor tiempo. desde ya muchas gracias |
#2
|
|||
|
|||
Post
No debes hacer un post para cada append, puedes hacerlo al final de que recorra la tabla 1.......puede que esto te ayude
|
#3
|
|||
|
|||
Sigue tardando
muchas gracias juan por la ayuda acabo de probarla y la verdad que no mejoro mucho sigue en 8 min por tabla ( Me entuciasme pensado que iva a bajar el tiempo pero bueno. y tengo como 40 tablas veras que una complicacion y perdida tiempo. La verdad que estoy enserrado y no le encuentro una solucion. Asi que por favor alguien que tenga una sujerencia seria de mucha alluda para mi. desde muchas gracias
|
#4
|
||||
|
||||
Hola, yo tnengo que hacer algo parecido aunque aun no me pasan las tablas lo que se es que no son extructuras iguales y voy a tener que usar query's para unir dos o mas tablas y poder obtener los campos en el orden que requiero, pero bueno lo que se me ocurre es crear la consulta de actualización a pata (como me han aconsejado algunos master de este foro ) y despues ejecutarla, toma el código con sus respectivas precauciones ya que aun no lo pruebo y me falta la condición para los campos boolean, posiblemente este mejore el tiempo de respuesta
__________________
Espero poder seguir exprimiéndote el cerebro 8) Jorge Zamora Ginez Puebla, Pue. México |
#5
|
||||
|
||||
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
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
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 |
#6
|
|||
|
|||
Cantidad de registros
Gracias por brindarme su tiempo y responder a mi problema, bueno la verdad es que las tablas son chicas, sobre las que estoy probando tiene 11.000 registro y me tarda 7 min. Creo que puede estar demorando es en el Bucle del FOR
for i:=0 to Tabla2.fieldcount-1 do begin Tabla1.fields[i].value := tabla2.fields[i].asVariant; end; Ya que la tabla tiene 66 campos. |
#7
|
|||
|
|||
No debes hacer un commit por cada registro, un commit o commitretaining es costoso, haz un commit cada 1000 o 5000 registros, este acelerara mucho la insercion de datos.
El uso de Variants tambien es bastante lento. Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Normalización Adecuada | plasma | Firebird e Interbase | 12 | 18-10-2006 04:57:01 |
Migrar datos a access | luis juarez | Conexión con bases de datos | 0 | 05-05-2006 16:34:14 |
No encuentra el path despues de migrar datos | Walterdf | Conexión con bases de datos | 2 | 07-03-2005 19:17:17 |
Migrar datos desde DBase a Interbase??? | Durbed | Firebird e Interbase | 2 | 25-08-2004 10:54:44 |
extension adecuada | Irina | Firebird e Interbase | 2 | 10-06-2003 13:44:42 |
|