Sobre tablas nativas, el seek y el scan van a ser más rápidos que un select o
cualquier otro sql, salvo que se involucren dos o más tablas en el proceso.Con
una sola tabla, ambos pueden usar rushmore (obvio sobre índices y el seek usa
indice), pero cuando procesas un solo registro seek y scan van uno por uno,
pero los sql siempre se preparan para grupo y eso lo va a hacer más lento.Con
más de una tabla e indices de diferentes tablas, el sql es el único que aplica
rushmore.Al menos, es lo que explicaron de la tecnología rushmore allá lejos y
hace tiempo.Saludos: Miguel, Santa Rosa (LP)
El Viernes, 3 de abril, 2015 0:32:47, César Pistiner
<[email protected]> escribió:
Si Ricardo ese índice sirve y creo que uno sobre Id de MiCursor también vas a
necesitar.
Para que el join sea óptimo.Saludos,
César
El jue., abr. 2, 2015 10:14 AM, Ricardo Aidelman <[email protected]>
escribió:
Hola Cesar, gracias por contestar.Lo voy a probar.Tengo un índice sobre la PK
MiTabla.Id.Supongo que es eso correcto, verdad? Saludos ricardo aidelman (
socio nº 1545 ) De: [email protected] [mailto:[email protected]] En nombre de César
Pistiner
Enviado el: miércoles, 01 de abril de 2015 11:08 p.m.
Para: GUFA List Member
Asunto: [GUFA] UPDATE - SQL Command vs. Seek() + Gather Buenas noches Ricardo,
Proba así a ver si mejora: Update MiTabla Set ; Campo1 =
MiCursor.Campo1,; Campo2 = MiCursor.Campo2,; Campo3 =
MiCursor.Campo3,; Campo4 = MiCursor.Campo4 ; From MiTabla Inner
Join MiCursor On MiTabla.Id == MiCursor.Id NOTA: deberías tener índices que te
optimicen esto. De todas formas muchas veces a nosotros nos ha pasado que un
scan con seek supera ampliamente al update-sql. Saludos,CésarEl 1 de abril de
2015, 21:31, Ricardo Aidelman <[email protected]>
escribió:Caballeros:Tengo una tabla libre MiTabla.dbf, con una PK sobre el
campo MiTabla.Id (Integer) Tambien tengo un cursor MiCursor, leído con un
Select obre MiTabla, donde modifico algunos campos. Hasta ahora actualizaba
MiTabla con el Procedure Grabar1(), pero tenía problemas de performance.Hice
pruebas con el Coverage, y el Procedure Grabar2() resultó ser infinitamente más
veloz. La preguntaes: está mal el comando Update – SQL, o siempre es preferible
el Seek() + Gather La tabla que se actualiza tiene 12500 registros y pesa
4.0Mb.El cursor que actualiza la tabla tiene 10 registrosEstoy usando VFP9 SP2
Procedure Grabar1() Update MiTabla Set ; MiTabla.Campo1 =
MiCursor.Campo1,; MiTabla.Campo2 = MiCursor.Campo2,;
MiTabla.Campo3 = MiCursor.Campo3,; MiTabla.Campo4 = MiCursor.Campo4 ;
From MiCursor ; Where MiTabla.Id = MiCursor.Id
* Tiempo de Proceso: Avg 0.636852 Endproc Procedure Grabar2()
Select MiCursor Locate Scan Scatter Fields ;
Campo1, Campo2, Campo3, Campo4 Name loReg Select MiTabla If
Seek( MiCursor.Id, "MiTabla", "Id" ) Rlock() Gather
Name loReg Unlock Endif Select MiCursor
EndScan * Tiempo de Proceso: Avg 0.078448 Endproc Muchas gracias
ricardo aidelman ( socio nº 1545 )Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 2015.0.5863 / Base de datos de virus: 4321/9433 - Fecha de la versión:
01/04/2015Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 2015.0.5863 / Base de datos de virus: 4321/9433 - Fecha de la versión:
01/04/2015Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 2015.0.5863 / Base de datos de virus: 4321/9437 - Fecha de la versión:
02/04/2015