13 de mayo de 2016

Matar sus índices con REINDEX

Artículo original: Kill your index with REINDEX
http://www.foxpert.com/knowlbits_200708_2.htm
Autor: Christof Wollenhaupt
Traducido por: Ana María Bisbé York


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.

No hay comentarios. :

Publicar un comentario