Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   cual es mas rapido??? (https://www.clubdelphi.com/foros/showthread.php?t=60826)

chass 15-10-2008 15:45:45

cual es mas rapido???
 
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

Cita:

Empezado por chass (Mensaje 320220)
...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

Cita:

Empezado por enecumene (Mensaje 320222)
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

Cita:

Empezado por roman (Mensaje 320228)
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

Cita:

Empezado por Delfino (Mensaje 320263)
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 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

Cita:

Empezado por rgstuamigo (Mensaje 320328)
Amigo chass si quieres optimizar tus consultas; te aconsejaria que leas este tremendo Libro 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.co...edures_p1.aspx

Salud OS

roman 16-10-2008 00:24:29

Cita:

Empezado por rgstuamigo
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


La franja horaria es GMT +2. Ahora son las 12:42:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi