Hola Estela

Primero,  no uses do while sino scan. El scan - endscan es mucho más eficiente 
por las siguientes razones:

a) se evita el skip porque el endscan hace un skip implícito
b) lo que es más importante, el scan permite usar la clausula FOR y si hacés 
las cosas siguiendo las reglas del Rushmore, vas a tener una mayor eficiencia

Segundo, un select, como bien dijo Davo, hace que el "laburo" lo haga el motor 
(en caso de usar el SQL Server, MySQL o demás). Y si las sentencias WHERE están 
optimizadas por Rushmore, mejor todavia. No te olvides que si usás seek, etc. 
lo que estás haciendo es traerte toda la tabla y todos los índices, mientras 
que con un select, solamente traés el resultado del query. El tráfico en la red 
mejora notablemente.

En cuanto a la optimización en sí, deberías dejar de usar índices compuestos. 
Usá mejor índices de clave única o simple, como fecha, cuenta, número de 
factura, etc. y combiná las cosas de manera de sacar la mayor ventaja posible 
de dichos índices.

Cuando vas a efectuar una consulta SELECT o un SCAN con cláusula FOR, acordate 
de poner en cero los índices de cada tabla interviniente, antes de efectuar la 
consulta, como en este ejemplo:

dFechaInicial = gomonth(date(),-5)
dFechaFinal = date()

set order to 0 in clientes
set order to 0 in facturas

select facturas.cuenta,clientes.empresa,facturas.fecha,facturas.importe from 
facturas left outer join clientes on facturas.cuenta = clientes.cuenta ;
where facturas fecha between dFechaInicial and dFechaFinal into cursor 
curFacturas order by facturas.fecha,facturas.numero

Se supone que la tabla CLIENTES tiene un índice por cuenta y la tabla FACTURAS 
tiene un índice por cuenta, otro por fecha y otro por número.

Otra cosa, en lugar de vistas, podés usar Cursor Adapters para hacer las 
consultas (pero eso es desde el VFP 8 en adelante).

Los demás puntos de tu pregunta, respecto de la VPN y el ER con el problema de 
las impresoras, se lo dejo a otros co-listeros.

Rafael Copquin



  ----- Original Message ----- 
  From: Estela Lázaro 
  To: GUFA List Member 
  Sent: Thursday, April 24, 2008 11:25 AM
  Subject: [spam] [GUFA] SQL o qué?


  Hola gente
  Tengo una aplicación en VFP7 que en redes locales anda sin problemas. Y 
resulta que ahora un cliente necesita acceder desde otros puntos para lo que en 
una máquina con win 2003 que oficia de servidor se armó un acceso por vpn y un 
escritorio remoto. El ER anda muy bien y a la velocidad del server, con exes en 
el remoto pero tienen problemas para imprimir y scanear (a las impresoras no 
las reconoce el win2003) por lo que lo imprimen en PDF y scanean con un pequeño 
exe local que les hice mapeado por VPN. Pero esto último es muy lento, lo del 
pdf y el acceso a las tablas por vpn (y eso que saqué casi todos los select 
para agilizar). En su momento dejé de lado los select pues me resultan más 
rápidos los seek y do while. Probé la aplicación completa local mapeada por VPN 
por el tema de las printers y es tremendamente lento.  Por lo que me parece que 
debería migrar al SQL (no sé cuál, el SQL Server, el MySql) que me significaría 
volver a los sqlexec y/o vistas parametrizadas, no? Otra alternativa?
  Voy a tener más trabajo por mantenimiento/administración de archivos por el 
SQL? 
  Bue, qué me sugieren? 

  Muchas Gracias
  Estela


------------------------------------------------------------------------------

  Los referentes más importantes en compra/venta de autos se juntaron:
  Demotores y Yahoo!. Ahora comprar o vender tu auto es más fácil. 
  Visitá http://ar.autos.yahoo.com/

  __________ Información de NOD32, revisión 3052 (20080424) __________

  Este mensaje ha sido analizado con NOD32 antivirus system
  http://www.nod32.com

Responder a