El comando REINDEX de VFP tiene grandes inconvenientes, puede provocar más problemas que los que intenta reparar.
Christof Wollenhaupt en este escrito comenta algunas de las peculiaridades del funcionamiento este comando y finalmente recomienda NO utilizarlo.
Matar sus índices con REINDEX
Artículo original: Kill your index with REINDEX
http://www.foxpert.com/knowlbits_200708_2.htm
Autor: Christof Wollenhaupt (http://www.foxpert.com/knowlbits.htm)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)
Cuando usted lee sobre cómo reparar índices en foros de FoxPro, frecuentemente recibe el consejo de evitar REINDEX. La razón más frecuente es que REINDEX depende del encabezado, que podría estar corrupto. Esto es cierto; pero como la mayoría de los desarrolladores, no he visto una cabecera de índice corrupta en años. La cabecera se actualiza solamente cuando agrega una etiqueta. Como esto requiere un acceso exclusivo a la tabla, hay poca oportunidad de introducir errores debido a empleo de caché, problemas con acceso multiusuario, etc.
Sin duda alguna, REINDEX es una mala idea. Para crear un nuevo archivo CDX, Visual FoxPro tiene que eliminar el CDX antiguo. Durante un corto tiempo la tabla existe sin archivo CDX. Este momento es suficientemente corto, para causar un mal funcionamiento. Cuando se cancela REINDEX debido a un error, no va a restablecer el archivo CDX anterior. Como demuestra el siguiente ejemplo, al final tendrá una tabla sin índices.
Create Cursor curDemo (cID C(1))
Insert into curDemo Values ("A")
Insert into curDemo Values ("B")
Index on GetID(cID) Tag cID CANDIDATE
? ">", Key(1)
Reindex
? ">", Key(1)
plKill = .T.
Reindex
? ">", Key(1)
Procedure GetID(tcID)
If Vartype(m.plKill) == "L"
Return "A"
Else
Return m.tcID
EndIf
EndProc
Ejecute este programa e ignore el mensaje de error. Puede ver que KEY(1) devuelve una expresión válida las dos primeras veces; pero nada la última vez. Si ha utilizado una tabla, notará que el archivo CDX no está. Este es el único problema cuando encuentra un error durante una operación de índices. Además de los problemas de memoria y conexiones de red, puede encontrar errores en índices candidatos y primarios cuando:
- añadió un índice sin permitir a VFP verificar los datos existentes
- ejecutó algún tipo de índice corrupto que permitió a VFP agregar múltiples registros con la misma llave o
- tuvo un índice en una función que está provocando un error
En cualquier caso, es probablemente mejor evitar estos problemas y no emplear REINDEX en una aplicación en producción.
|