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


  

Responder a