lunes, 24 de septiembre de 2007

Optimizando consultas ADO.NET a tablas dbf de VFP

Para mi primer post , que mejor manera de postear algo, que hacerlo sobre un problema para el que no he encontrado respuesta en ningun lado y que me ha llevado de cabeza durante mucho tiempo.


Resulta que si tenemos una tabla dbf de Visual Foxpro ( con muchos registros, pongamos 2 millones ) en la que tenemos definidos índices compuestos , y queremos hacer consultas desde .net , nos encontraremos con el problema del rendimiento.




Despues de darle muchas vueltas, descubrí que el problema principal eran los índices, pero no que no tuviera , sino que la forma en la que estaban definidos no se la tragaba el driver de Foxpro para .NET.


El problema radica en que para que el driver OLEDB para Visual Foxpro 9.0, utilice los índices de nuestra tabla, estos han de estar definidos como union de cadenas mediante el operador "+", si utilizamos el operador "-" , no utilizará el índice.


Es decir, que en la siguiente imagen, si realizaramos una consulta sobre la tabla , utilizaria el índice idx2 en vez del idx1 ( de hecho si no existiera idx2, la consulta no utilizaria el índice ).






El resultado es evidentemente espectacular porque pasabamos de consultas de 5 minutos ( inviables en producción ) a consultas de 2 segundos.

Espero que te sirva esta información si algun dia has de conectar con tablas dbf desde .net utilizando ADO.NET.

7 comentarios:

Anónimo dijo...

Gracias a Dios hay personas como Usted que comparten su conocimiento, y que ademàs trabajan con foxpro y .net y nos ayuda enormemente a aquellos que estamos iniciando esta compleja transiciòn del zorro a .net.

Anónimo dijo...

Esa era la razón por lo que las tablas Exped y Eventos de TABIMED tenían ambos indices (con + y con -).
Inicialmente empleabamos los (-), pero al tener que trabajar con otros entornos y acceder por ejemplo desde Excel, descubrimos ese problema.

Muy bueno el blog.

Saludos.
José Luis

Anónimo dijo...

me gusto tu blog puedo enlazarlo desde mi sitio?

Enrique Catala dijo...

si claro, sientete libre de enlazarme.
un saludo.

rchavezh@ideasys.com.mx dijo...

Tengo una duda esto es solo si puedo modificar la base de datos pero desde un SQL como puedo indicar que no utilice los indices.

existe algo como el plan en SQL

Enrique Catalá Bañuls dijo...

En FoxPro ni hay planes de ejecución.

Macrosoft dijo...

Good information for vfp.

VB.Net Migration