24.2. Reindexación rutinaria #

En algunas situaciones, vale la pena reconstruir los índices periódicamente con el comando REINDEX o mediante una serie de pasos de reconstrucción individuales.

Las páginas de índice B-tree que han quedado completamente vacías se reclaman para su reutilización. Sin embargo, todavía existe la posibilidad de un uso ineficiente del espacio: si se han eliminado todas las claves de índice de una página excepto unas pocas, la página permanece asignada. Por lo tanto, un patrón de uso en el que la mayoría de las claves de cada rango se eliminan eventualmente, pero no todas, dará lugar a un uso deficiente del espacio. Para tales patrones de uso, se recomienda la reindexación periódica.

El potencial de hinchamiento en índices que no son B-tree no ha sido bien investigado. Es una buena idea monitorear periódicamente el tamaño físico del índice cuando se utiliza cualquier tipo de índice que no sea B-tree.

Además, para los índices B-tree, un índice recién construido es un poco más rápido de acceder que uno que ha sido actualizado muchas veces, porque las páginas lógicamente adyacentes suelen ser también físicamente adyacentes en un índice recién creado. (Esta consideración no se aplica a los índices que no son B-tree). Podría valer la pena reindexar periódicamente solo para mejorar la velocidad de acceso.

REINDEX se puede utilizar de forma segura y sencilla en todos los casos. Este comando requiere un bloqueo de tipo ACCESS EXCLUSIVE por defecto, por lo que a menudo es preferible ejecutarlo con su opción CONCURRENTLY, que solo requiere un bloqueo de tipo SHARE UPDATE EXCLUSIVE.