Estoy considerando usar CLUSTER para reordenar una tabla por un índice. Entiendo que esta recreación de los datos de la tabla hace que todos los índices existentes se hinchen o sean inútiles. He visto algunas indicaciones de que se requiere un REINDEX después de un CLUSTER. He encontrado otras referencias que indican que CLUSTER hace un REINDEX. La documentación oficial no dice nada acerca de que REINDEX sea parte de CLUSTER o sea obligatorio (aunque sí sugiere ejecutar ANALYZE después del CLUSTER)
¿Puede alguien definitivamente (es decir, con algún tipo de referencia a documentos oficiales) decir si se requiere o no un REINDEX después de un CLUSTER?
postgresql
ÁRBOL
fuente
fuente
cluster
reubica las filas, por lo que tendrá que actualizar la información del índice de todos modos.Respuestas:
No necesita reindexar, porque
CLUSTER
efectivamente lo hace por usted.Más específicamente,
CLUSTER
bloquea la tabla de origen y luego crea una nueva copia ordenada de acuerdo con el índice de destino. Crea índices en la nueva copia y luego reemplaza la tabla antigua e indexa con las nuevas.Tenga en cuenta que esto también es cierto
VACUUM FULL
en 9.0+.Si ha estado viendo una discusión que sugiere que los
CLUSTER
índices de hinchazón podrían ser personas que suponen queCLUSTER
funciona como pre-9.0VACUUM FULL
. También podría estar viendo y leyendo mal las discusiones que mencionan la hinchazón del índice causada por laVACUUM FULL
implementación anterior y sugiriendoCLUSTER
como alternativa .Esto está implícito en la documentación :
Lo que no dice, pero debería, es que esas copias temporales reemplacen la tabla original . (Negrita mía).
fuente
CLUSTER
no se reescriban los índices, y el examen de los archivos realesbase/
mostrará claramente nuevosrelfilenode
correos electrónicos. Parece que te preocupan los problemas que aún no tienes.Estoy con a_horse_with_no_name en esto: no necesita volver a crear los índices. Además de que la
CLUSTER
documentación no lo menciona, también podemos consultar laREINDEX
página:Claramente,
CLUSTER
no cae en ninguno de estos casos.Y hay una pequeña oración en los
CLUSTER
documentos:Esto sugiere que, al igual que la tabla en sí, los índices también se reordenan durante el proceso, lo que hace que la reindexación sea inútil.
fuente
Encontró una referencia, en la sección Recuperando espacio en disco .
fuente
Analizando todas las respuestas, en mi opinión, la forma correcta de hacerlo es reindexar ANTES del clúster. Como la documentación no dice si el clúster hace o no una reindexación, y solo una copia del índice, ordenada o no, creo que un índice indexado dará como resultado una mejor tabla agrupada. Después de eso, un análisis finalizará el trabajo. Un vacío lleno antes de todo parece ser inútil, a menos que el clúster y / o la reindexación no liberen tuplas muertas
fuente
CLUSTER
yVACUUM FULL
produce una nueva tabla física, simplemente no puede haber ningún muerto después de ella. El espacio utilizado por la copia anterior se liberará al final de la operación.