Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Optimizar consulta (https://www.clubdelphi.com/foros/showthread.php?t=83927)

JAI_ME 16-08-2013 15:45:28

Optimizar consulta
 
Buenos días, no estoy seguro que se pueda hacer algo al respecto pero les voy a comentar mi caso, en la empresa donde trabajo tenemos un software DOS - clipper que usa como BD archivos .DBF, compramos un canal de datos en fibra optica de 256k de ancho de banda con el fin de interconectar todas nuestras sedes.

En la "sede 1" hay un archivo .DBF que pesa 10.7Mb y tiene 8.000 registros ingresados, hice una consulta SQL sobre esta tabla con un programa hecho en delphi desde la "Sede 2" pero esta consulta tarda mas de 15 minutos en ejecutarse, es obvio que si el archivo estuviera locamente en mi equipo o en la red local la cosa fuera diferente, pero en este caso esta en otra sede geograficamente distante pero conectados a traves del canal, hay alguna forma de mejorar la velocidad de esta consulta. :confused::confused::confused::confused::confused:

les agradezco su colaboración y si hay algo que se pueda hacer gracias.

Neftali [Germán.Estévez] 16-08-2013 17:03:39

Cita:

Empezado por JAI_ME (Mensaje 465676)
...pero esta consulta tarda mas de 15 minutos en ejecutarse...

Hay algo ahí que no está bien.
Con ese tiempo puedes traerte el fichero y ejecutar la consulta en local.
Tal vez deberías diseñar de otra forma la petición de datos.

JAI_ME 16-08-2013 17:25:48

La consulta que hago es algo así

Select campo 1, campo 2, campo 3 from "\\192.168.1.68\c\bd\Miarchivo.DBF"
where campo 1 <> 0

Donde 192.168.1.68 es la IP del equipo 1, lo que intento es optimizar la consulta si se puede, sin necesidad de copiar y pegar el archivo al local, se podrá hacer algo ?

Neftali [Germán.Estévez] 16-08-2013 17:37:33

Sólo por curiosidad.
¿Qué tarda si copias el archivo de una máquina a otra?

newtron 16-08-2013 18:39:06

Hola.

Por mi experiencia las consultas SQL no son la mejor forma de manejar la información con ficheros DBF, lo más rápido es usando los índices y escribiendo el código a mano. De todas formas 15 minutos me parece excesivo para una tabla con tan pocos registros.

¿Has probado a hacer la consulta desde el bde admin?, aunque no tendría que tener nada que ver.

Edito: me doy cuenta que estás abriendo la tabla desde otra ubicación y estás conectado por internet, eso si que es lento.

JAI_ME 16-08-2013 19:24:11

gracias y como puedo hacer consultas a traves de los indices desde delphi ?

orodriguezca 17-08-2013 01:09:06

No creo que haya forma de mejorar esta consulta. El gestor de base de datos tiene que accesar la totalidad del archivo físicamente y realizar muchos I/O sobre la red WAN. Aún cuando existan indices, dada la condicion campo1 <> 0, habría que recorrer todo el indice para encontrar los registros coincidentes, esto es lento. Por otra parte estamos diciendo que el ancho de banda es de solo 256Kb, los cuales seguramente no están dedicados exclusivamente a la ejecución de está consulta. No veo solución fácil.

newtron 19-08-2013 10:38:09

Bueno, eso depende de la cantidad de registros que tengan campo1=0, si son pocos lógicamente tendrá que evaluar casi todos los registros pero si son muchos y tiene un índice por ese campo puede hacer un SetKey y dejar fuera los que no cumplan la condición. El tema es que depende qué sistema de índices use con la tabla DBF, porque hay distintos tipos, y no sé cual de ellos se podrá abrir desde Delphi.

¿Qué indices usa el programa DOS?


La franja horaria es GMT +2. Ahora son las 12:01:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi