PDA

Ver la Versión Completa : Qué es más rápido?


LuisAlf::
09-08-2013, 21:29:49
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:


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:


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
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
Tienen razón...

Usually does, mate!!

...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
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