Ver Mensaje Individual
  #1  
Antiguo 28-08-2007
jmartinez jmartinez is offline
Registrado
 
Registrado: jun 2007
Posts: 1
Reputación: 0
jmartinez Va por buen camino
Optimizar Consulta - algoritmo

Muy Buenas,

Me llamo Jose y soy de León. Este es mi primer mensaje porque hasta el momento todas mis dudas las pude solucionar buceando por el foro, así que hola a todos!. Espero que haya acertado con el subforo correcto para postear.

Mi duda: Utilizo Delphi(6) + Zeos + Mysql. En estos momentos la BD en localhost. Me gustaría optimizar un proceso que considero que tarda demasiado. (1 min aproximadamente). A ver si logro explicarme de forma sencilla. Tengo el siguiente esquema:

1.- Ejecuto Consulta de Selección (devuelve 3.000 registros)
2.-Mientras no alcance el final del recorset, hacer
2.1.- Pequeños calculos con algunos campos del registro.
2.2.- Creación de Nueva Consulta de Insercción (Insert Into..... EXECSQL)
2.3.- Paso al siguiente registro.


Básicamente lo que hago es recorrer una tabla de clientes con datos, hacer cálculos dentro del bucle y con cada uno de ellos, para generar un recibo bancario, que creo dentro de dicho bucle. Como la consulta de seleccion inicial me trae más de 3.000 registros, tengo 3.000 iteraciones del bucle, y en cada una de ellas se hace un Insert Into, y un md.zqQuery.ExecSQL para insertarlo. Este proceso es el que me tarda alrededor de un minuto. (sin grabar los recibos en BD, el proceso completo tarda 1.6 segundos).

Tendría alguna forma de mejorar ésto?. Se me ocurría al menos meter una barra de progreso, pero ese "progreso" no comienza hasta que el proceso completo del bucle termina, es como si ignorara la instruccion de avance de la barra de progreso. Supongo que será algo del procesador y que habría q meter threads (algo que tengo bastante olvidado).

También he pensado grabar los datos a un archivo de texto, y posteriormente hacer un único Insert Into con todos los "Values", pero tampoco lo veo claro.


A ver me he explicado bien y alguien puede guiarme un poco.

Gracias por adelantado.
Responder Con Cita