PDA

Ver la Versión Completa : Pueden los procedimineto alentar un proceso largo


antrahxg
17-10-2008, 05:25:22
Hola mi duda surge a raiz de lo siguiente

Tengo un programa que el unico proceso que realiza es una consulta y el query1 me regresa aproximandamente 350,000 registros, luego recorro registro por registro ese query1 con un while.

Dentro del while tengo un procedimiento que se encarga de insertar o actualizar el registro actual del query1 en otra tabla de la misma base de datos, pero en realidad ese procedimiento son unas 15 lineas, seria mas conveniente poner esas lineas dentro del while o las 350000 llamadas que se hacen al procedimiento no afectan en realidad el tiempo de ejecucion del programa.

Otra pregunta, Dentro del while lo que realmente hago es otra consulta para saber si el registro actual del query1 esta en la otra tabla para saber si actualizar o insertar, obviamente cuando la tabla destino se va llenando la consulta se va a haciendo mas tardada.

Seria mas rapido si pusiera la insercion dentro de un try excep, si el try falla el except haria la actualizacion, seria algo como


try
sql.add('Insert into Tabla ..........');
open
except
sql.add('Update Tabla ..............');
execSql;
end;

Gracias
Roberto Garcia

Lepe
17-10-2008, 07:28:15
Todo el proceso completo, incluido los whiles y demás, debería ser un procedimiento almacenado. ¿Por qué? porque al ser un SP, las consultas están ya compiladas en el servidor y te ahorras el tiempo de compilar (qry.prepare). Además no hay tráfico de red, ya que todo se hace desde el lado del servidor, por tanto, es más ágil.

La velocidad propia de cada SQL, ya dependerá de los índices que tengas creado al efecto en la BBDD, y por ende, la eficiencia de cada SQL está condicionado a esos índices y la cantidad de registros afectados por ella.

En resumen: sí debería ser más rápido desde un SP

En cuanto a tu duda del try ... except... bueno, Firebird 2 cuenta con la instrucción MERGE que hace eso, intenta actualizar y si no existe, inserta. Obviamente sin saber tu motor de bases de datos, poco más puedo decir.

Saludos