Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Qué es más rápido? (https://www.clubdelphi.com/foros/showthread.php?t=83877)

LuisAlf:: 09-08-2013 21:29:49

Qué es más rápido?
 
Hola!

Vengo con una simple duda...

Me gustaria saber que es mas rapido.. acabo de encontrar 2 metodos de hacer actualizaciones con ADO..
El primer metodo y el que siempre uso es:

Código Delphi [-]
   with ADQ1 do
   begin
       Close;
       SQL.Clear;
       SQL.Add('UPDATE inventario SET status="SURTIDO" WHERE id='+identificador);
       ExecSQL;
   end;

Y recientemente me encontre con esta:

Código Delphi [-]
        with ADQ1 do
        begin
          Close;
          SQL.Clear;
          SQL.ADD('SELECT inventario.leadcode, inventario.status, inventario.id'
                  +' FROM.....
                    +' WHERE (((inventario.id)='+identificador+'));');
          Open;
        end

        adq1.Edit;
        adq1.Recordset.Fields['STATUS'].Value:='SURTIDO';
        ADQ1.UpdateRecord;

Cual metodo es mas adecuado y cual es mejor, en cuanto a rapidez?

Gracias, cualquier comentario sera de gran ayuda.

oscarac 09-08-2013 21:46:35

yo creo que el primero
mientras menos paso mejor
al menos es mi manera de pensar

LuisAlf:: 09-08-2013 23:36:26

Hola Oscarac!

Sabes que acabo de hacer varias pruebas con los dos ejemplos diferentes que antes mecione.. y por medio de codigo, mostraba el tiempo que tardaba en hacer la actualizacion...
La primera forma es decir... la pura consulta del UPDATE... en promedio devolvia 350 milisegundos... y de la otra forma es decir poniendo el Adoquery en edit... duraba en promedio 290.

Como puedes ver las apariencias engañan....

Y al parecer es mas efectivo el segundo metodo, segun la pruebas.

oscarac 09-08-2013 23:38:45

y con cuantos registros has probado?

LuisAlf:: 09-08-2013 23:48:35

Solo lo he probado con un registro, que lo devuelve el "identificador".

De alli mi duda. Despues hare pruebas en un ciclo para ver resultados.

Casimiro Notevi 09-08-2013 23:50:41

Un registro.
Buena prueba ;)

TiammatMX 10-08-2013 00:22:38

Cita:

Empezado por LuisAlf:: (Mensaje 465295)
Solo lo he probado con un registro, que lo devuelve el "identificador".

De alli mi duda. Despues hare pruebas en un ciclo para ver resultados.

Pues al menos, deberías probar con unos 10,000 registros (obviamente, tomando los tiempos de cada transacción y promediándolos) para más o menos darle "carga" al componente..., con un sólo registro es muy engañosa tu cifra.

oscarac 10-08-2013 00:27:24

no pues...
con 1 solo registro?
no te pases

otro factor es el motor de base de datos, no mencionas cual estas usando
prueba con 100,000 registros

LuisAlf:: 10-08-2013 00:44:36

Tienen razón...

Acabo de ver que el poner el Adoquery en modo de edición (edit) para hacer una actualización solo funciona cuando es un registro en especifico.

Obviamente al hacer un ciclo recorriendo una consulta y dentro de él poner el adoquery en modo de edicion para hacer una actualización registro por registro, va a durar mas tiempo que hacer una sola consulta de UPDATE.

En cuanto a mi duda (solo para un registro), queria saber si era mas rapido hacer el select, luego despues el update por medio del identificador pero me di cuenta que es mas rapido hacer la consulta y poner el adoquery en modo de edición para aplicar una actualización al registro individual.

TiammatMX 10-08-2013 01:04:10

Cita:

Empezado por LuisAlf:: (Mensaje 465301)
Tienen razón...

Usually does, mate!!

Cita:

Empezado por LuisAlf:: (Mensaje 465301)
...Acabo de ver que el poner el Adoquery en modo de edición (edit) para hacer una actualización solo funciona cuando es un registro en especifico...

En cuanto a mi duda (solo para un registro), queria saber si era mas rapido hacer el select, luego despues el update por medio del identificador pero me di cuenta que es mas rapido hacer la consulta y poner el adoquery en modo de edición para aplicar una actualización al registro individual.

Es que tienes varias opciones en éste caso. Una, tomar los datos mediante TEdit's o lo que se requiera, construir una sentencia SQL que te permita actualizar/ingresar el registro y continuar tu procesamiento. Dos, usar componentes DataAware conectados a la tabla directamente y a su respectivo campo, ejecutar un Post implícito y listo; es lo mismo que la opción 1, pero sin el engorro de "crear" la sentencia.

Aquí el peligro estriba en que si tu usuario se le olvida/no captura/cambia/infiere los datos, "ya te llevó la tía de las muchachas" y no puedes controlar con precisión en dónde radicaría un posible error.

juanelo 10-08-2013 19:58:31

Cita:

Empezado por tiammat (Mensaje 465298)
Pues al menos, deberías probar con unos 10,000 registros (obviamente, tomando los tiempos de cada transacción y promediándolos) para más o menos darle "carga" al componente..., con un sólo registro es muy engañosa tu cifra.

Yo me pregunto algo, ¿que operacion implica el modificar 10,000 registros?, mi opinion en relacion con "updates" es que cuando se necesiten modificar tantos registros, son normalmente procesos que se corren sin tanta frecuencia.
Donde si tenemos que hacer enfasis, es las consultas que puedan implicar una gran cantidad de registros, y muchas veces aunque nuestra consulta "vuele como cohete", el cuello de botella viene en el "front end".
Saludos


La franja horaria es GMT +2. Ahora son las 22:37:18.

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