PDA

Ver la Versión Completa : cual es mas rapido???


chass
15-10-2008, 15:45:45
buenos dias gente:): tengo una duda y es la siguiente:confused:
sucede que tengo que optimizar la velocidad de procesamiento de un sistema y al ver el codigo me di cuenta que inserta registro en una base de datos firebird desde la interfaz delphi de la siguiente manera:

(en pseudo delphi:D)


contador: integer;
begin
contador:=0;
while contador=numero_de_registros
begin

//hace un select de una tabla primero y como:eek:
//esta en un sqlquery lo ejecuta de la siguiente mnera
data.Params[0].AsTime:=var1.date;
data.Close();
data.Open();
//el resultado se almacena en un dataset:rolleyes:
if va1=dataset.fields[0].asdate then
begin
//:pno hace nada
end

else
begin
//inserta si la comparacion es falsasqlquery.sql.add('insert into table(val1,val2) values'+ var1+','+ var2);
sqlquery.execsql();
contador++;
end;
end;

si inserta 1 o 10 o hasta 25 registro la velocidad es aceptable:o
pero al insertar 100 o 300 registro me tarda como 2 minutos..:eek:
mi pregunta es si al realizar una especie de procedimiento almacenado no se optimizaria un poco mas :confused:?
Desde paraguay les mando un gran abrazo y muchas gracias por su ayuda

enecumene
15-10-2008, 15:52:00
...mi pregunta es si al realizar una especie de procedimiento almacenado no se optimizaria un poco mas :confused:?


En absoluto amigo, con procedimientos almacenados los datos se mueven más rápido porque la base de datos hace todo el trabajo. ;)

Saludos.

chass
15-10-2008, 15:54:54
muuuuuuuuuuuchas gracias.. es que tengo dos dias para optimizar entr el 60 y 80% por lo menos ese proceso..
gracias

roman
15-10-2008, 16:22:39
En absoluto amigo, con procedimientos almacenados los datos se mueven más rápido porque la base de datos hace todo el trabajo. ;)

Saludos.

Hola ene, a mi me gustaría saber porqué es más rápido en este caso. Los datos que se insertan de cualquier forma tienen que viajar del cliente al servidor ¿no?

// Saludos

enecumene
15-10-2008, 16:28:10
Hola ene, a mi me gustaría saber porqué es más rápido en este caso. Los datos que se insertan de cualquier forma tienen que viajar del cliente al servidor ¿no?

// Saludos

La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y solo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

Saludos ;)

roman
15-10-2008, 16:38:31
Amigo, dame algo más digerible :D. A ver, una sentencia INSERT también la ejecuta el servidor, ¿qué no? Y, ¿qué necesito mandarle? Los datos que voy a insertar. ¿Qué le tengo que mandar al procedimiento almacenado? Supongo que también los datos, ¿qué no?

Mencionas que el servidor posee acceso directo a los datos que necesita manipular, pero, ¿cuáles datos? Si apenas los voy a insertar, el servidor no tiene esos datos ¿o sí?

Vamos, entiendo, que si voy, por ejemplo, a transferir datos de una tabla a otra, o manipular muchos registros que ya existen en el servidor, desde luego será más rápido dejarlo todo en manos de éste, pero en este caso de inserciones no termino de entender cuál es la ventaja por sobre, digamos, un prepared query.

// Saludos

fjcg02
15-10-2008, 17:20:40
Hola,
a parte de la discusión, no entiendo el proceso de inserciones.
Puedes revisar el código o explicarlo con un pequeño juego de ensayo?
Por otro lado, si tienes componentes visuales asociados a los dataset, te recomiendo desconectarlos previamente y luego volverlos a conectar. Se ahorra muchísimo tiempo evitando el refresco de los datos en la pantalla.

Dataset.DisableControls;

tu codigo

Dataset.EnableControls


Suerte.

Delfino
15-10-2008, 18:25:02
El pseudo Delphi no va bien :confused:, entenderiamos mejor el autentico ;)
Si usas un TIBQuery pon su propiedad Unidirectional a True o mejor utilizar directamente el TIBSQL,
Si por cada valor q tienes q insertar necesitas enviarlo desde tu aplicacion, mejor utilizas esto, si puedes hacer lo mismo con stored procedure, o sea generar los valores desde el mismo, en este caso mejor lo segundo..

chass
15-10-2008, 18:35:14
El pseudo Delphi no va bien :confused:, entenderiamos mejor el autentico ;)
Si usas un TIBQuery pon su propiedad Unidirectional a True o mejor utilizar directamente el TIBSQL,
Si por cada valor q tienes q insertar necesitas enviarlo desde tu aplicacion, mejor utilizas esto, si puedes hacer lo mismo con stored procedure, o sea generar los valores desde el mismo, en este caso mejor lo segundo..

jajaj mi pseudo delphi es terrible pero creo que es solo el resultado de programar en 3 o 4 lenguajes diferentes..
en cuanto a los TIBQuery no los he usado porq no hice yo este codigo, solo me toca optimizarlo..
es un trabajo dificil al menos cuando no tiene comentarios, ningun tipo de documentacion y con nombre de variables poco (o nada) intuitivas.
pero ahora lo estoy implementando en un stored procedure.. veremos que sale..:D
gracias por las respuestas..

rgstuamigo
15-10-2008, 20:53:03
Amigo chass si quieres optimizar tus consultas; te aconsejaria que leas este tremendo Libro (http://www.intitec.com/varios/Delphi_al_limite.pdf) de trucos y demas ;En las paginas 16,17,18,19,20,21,22 el autor esta hablando exactamente de lo que estas deseando hacer;
Incluso para ti amigo Roman ahi sacaras tus dudas;:)
Saludos.......

roman
15-10-2008, 21:29:21
Se me estaba pasando este mensaje. Muchas gracias por la recomendación, le voy a dar una leída :)

// Saludos

rgstuamigo
15-10-2008, 21:54:45
Chekealo Roman y luego nos comentas y sacas tus conclusiones para que le ayudemos a chass.;)
Saludos....

chass
15-10-2008, 21:56:53
Amigo chass si quieres optimizar tus consultas; te aconsejaria que leas este tremendo Libro (http://www.intitec.com/varios/Delphi_al_limite.pdf) de trucos y demas ;En las paginas 16,17,18,19,20,21,22 el autor esta hablando exactamente de lo que estas deseando hacer;
Incluso para ti amigo Roman ahi sacaras tus dudas;:)
Saludos.......
Excelente libro.. gracias

egostar
15-10-2008, 21:58:22
Hola

También pueden leer esto que me parece interesante.

http://www.sql-server-performance.com/tips/stored_procedures_p1.aspx

Salud OS

roman
16-10-2008, 00:24:29
Chekealo Roman y luego nos comentas y sacas tus conclusiones

He visto por encima el libro que mencionas y las páginas que indicas, pero aunque tocan el tema de optimizar consultas utilizando una sola transacción en lugar de una por cada registro insertado, no trata el tema que originó este hilo, que es el de la comparación entre procedimientos almacenados e inserciones a pelo.

De todas formas seguiré mirando, pues se ve interesante el libro.

// Saludos