Gracias por la explicación, Miguel


Saludos



ricardo aidelman

( socio nº 1545 )



De: [email protected] [mailto:[email protected]] En nombre de Carlos Miguel FARIAS
Enviado el: sábado, 04 de abril de 2015 10:18 a.m.
Para: GUFA List Member
Asunto: [GUFA] UPDATE - SQL Command vs. Seek() + Gather



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ésar

El 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 registros

Estoy 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 <http://www.avg.es/>
Versión: 2015.0.5863 / Base de datos de virus: 4321/9433 - Fecha de la versión: 
01/04/2015

Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.es <http://www.avg.es/>
Versión: 2015.0.5863 / Base de datos de virus: 4321/9433 - Fecha de la versión: 
01/04/2015

Se certificó que el correo no contiene virus.
Comprobada por AVG - www.avg.es <http://www.avg.es/>

Versión: 2015.0.5863 / Base de datos de virus: 4321/9437 - Fecha de la versión: 
02/04/2015



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/9452 - Fecha de la versión: 
04/04/2015




-----
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/9452 - Fecha de la versión: 
04/04/2015

Responder a