Consultas sobre los indices...

Hola, me gustaría pedirte un consejo sobre como optimizar la manera de utilizar los indices.
Yo estaba acostumbrado a hacer en mis aplicaciones clipper algo así al principio de todo el "proyecto", por ejemplo:
select 2
use datos
index on codigo to datos
select 1
Use agenda
index on nombre to agenda
Eso me obligaba a tener el indice al arrancar el programa y se mantenía actualizado durante la ejecución...
Ahora, en VFP, puedo notar que si hago eso el tamaño de los archivos CDX se incrementa llegando a los 20 megas, o más...
¿Cuál seria la manera más inteligente de manejar esto?
Si es cierto que con solo hacer:
USE datos
set order to datos
... Los indices se mantienen actualizados, convendría comprobar si existen los archivos CDX al comienzo de la aplicación con IF FILE(...), o existe alguna manera de que los indices se creen y se sobreescriban como se hacia a la antigua...
De todas maneras cualquier sugerencia sera agradecida...
Muchísimas gracias de antemano.
Marcelo

1 respuesta

Respuesta
1
No es necesario que se reescriban, cuando abres una tabla automáticamente e abre su índice estructural (cdx) y se mantiene actualizado esté o no activo el índice.
La ventaja de un archivo de índice estructural es que te permite manejar varios "indices" en un solo archivo, así por ejemplo, si en la definición de tablas creas dos o más indices, pongamos por ejemplo, por ID y otro por nombre, puedes abrir la tabla:
Use Tabla Order id In 0 && Para activar la llave ID.
Set Order To nombre      && Para cambiar la llave de ordenamiento.
Set Order To 0                && Para deshabilitar cualquier ordenamiento.
Sin importa el ordenamiento (o llave), activo, ambos índices se mantienen actualizados. Yo como medidad adicional tengo un procedimiento que se ejecuta al final de la aplicación:
If FLock( "tabla" )        && Si puedo bloquear la tabla es porque nadie la está ocupando
     Use tabla In tabla Exclusive    && Abro la tabla en modo exclusivo
     Reindex                  && Vuelvo a generar los índices
EndIf
Quit
Nota que cuando abro la tabla en modo exclusivo no estoy indicando ningún ordenamiento.
Upa, estaba por editar y no me diste ni tiempo... jajaja Que velocidad!
De eso te iba a hablar, ahora yo estoy usando por ejemplo:
USE artículos
INDEX ON nombre TAG nombre
INDEX ON numero TAG numero
Para durante el programa poder seleccionar entre uno u otro indice con SET ORDER TO xxx
o sea, si entiendo bien tu explicación anterior, ¿con solo abrir la tabla al comienzo haciendo
USE artículos
cada vez que yo agrague o elimine registros los indices se mantienen actualizados dentro del archivo CDX?
¿Y de esta manera al tenerlos con el TAG yo puedo seleccionarlos en el momento que los necesite con SET ORDER TO xxx?
Muchísimas gracias de nuevo...
Marcelo
Si, esa es la idea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas