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.
Publicar un comentario