La Web del Programador: Comunidad de Programadores
 
    Pregunta:  60812 - CONSULTAS LENTAS
Autor:  Gabriela
Hola a todos, espero que alguien me pueda ayudar con esto. Tengo mi sistema con sus reportes y consultas para mostrar por pantalla, realizados usando vistas locales o consultas select - sql into cursor. hasta hace un tiempo todo bien, pero mis tablas ya tienen alrededor de 600.000 registros y las consultas son LENTISIMAS.....Probe con un formularia cambiar por seek, found(), do while, etc y cambió notablemente la rapidez, pero eso significaría un trabajo enorme de cambiar codigo y crear cantidad de indices. Justamente yo use vista u consultas por que tenía entendido que era lo mas rápido.
Mando un ejemplo para ver si alguien me puede ayudar a ver si estoy cometiendo algun error o hay alguna forma de optimizar este procedimiento

*hago consulta de entradas menos salidas del dia que estoy consultando

SELECT mov_stock.fecha_mov, mov_stock.id_proveed, mov_stock.cod_art,;
SUM(mov_stock.entrada_u - mov_stock.salida_u) AS EXISTE,;
SUM(mov_stock.entrada_k-mov_stock.salida_k) AS EXISTE_k;
FROM gestion!mov_stock ;
LEFT OUTER JOIN gestion!comprob ON mov_stock.cod_cpte = comprob.cod_cpte ;
WHERE Comprob.mov_stock = 1 ;
AND Comprob.afecta_ex = 1;
and mov_stock.id_proveed =mprovee;
AND mov_stock.fecha_mov =mFdesde ;
group by mov_stock.cod_art INTO CURSOR cierre

Agradeceré cualquier sugerencia o ayuda URGENTE!!!!

  Respuesta:  Javier Caballero
Gabriela, consulta: vos estas trabajando con dbf o algun motor de base de datos?
En ambos casos las vistas locales o remotas son lentas a partir de los 50mil registros +-.
Mi recomendacion es que utilices sentencias sql. Y si estas usando dbf, ya tendrias que ir pensando en migrar a algun motor de base de datos. Espero tus comentarios para buscar una solucion a tu problema.
Saludos

  Respuesta:  Gabriela Gonzalez
Gracias por responderme. En efecto estoy usando dbf, o sea la base propia de visual 7.0 que es la versión que utilizo. Por ahora lo que estoy haciendo es usar consultas solo para aquellos casos que utiliza pocas relaciones y filtros. Después estoy cambiando por los casicos seek, found(), do while, etc. De esta manera se han super agilizado los resultados de los informes. No se a que te referis con usar sentencias sql. Acaso el ejemplo de la consulta que puse en la pregunta no es una sentencia sql?
Saludos
Gracias