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 <
ricardo.aidel...@mug.org.ar> 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:* GUFA@mug.org.ar [mailto:GUFA@mug.org.ar] *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 <
> ricardo.aidel...@mug.org.ar> 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
> 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
> 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
>
> Versión: 2015.0.5863 / Base de datos de virus: 4321/9437 - Fecha de la
> versión: 02/04/2015
>

Responder a