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 >