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