REBUILD EN MYSQL: QUÉ HACE Y CUÁNDO UTILIZARLO

El comando "REBUILD" en MySQL se utiliza para reconstruir una tabla o sus particiones. Es una operación muy útil, especialmente en tablas grandes o particionadas.

¿Qué hace exactamente el REBUILD?

  • Reconstruye físicamente la tabla o partición desde cero.
  • Reorganiza los datos de forma contigua (elimina fragmentación).
  • Libera espacio no utilizado (DATA_FREE).
  • Reconstruye los índices secundarios.
  • Actualiza las estadísticas de la tabla.
  • Puede mejorar significativamente el rendimiento de consultas.
Es la forma moderna y recomendada de hacer lo que antes se hacía con el comando "OPTIMIZE TABLE".

Sintaxis más usada

Para tablas normales (no particionadas)

//Forma recomendada en MySQL 8.0
ALTER TABLE nombre_tabla REBUILD;
//Forma alternativa (también muy usada)
ALTER TABLE nombre_tabla FORCE;

Para tablas particionadas (la más común)

//Reconstruir todas las particiones
ALTER TABLE nombre_tabla REBUILD PARTITION ALL;

//Reconstruir una partición específica
ALTER TABLE nombre_tabla REBUILD PARTITION p2023, p2024;

Diferencias importantes entre OPTIMIZE y REBUILD

Comando Qué hace Recomendado para Velocidad
OPTIMIZE TABLE Rebuild + defragmentación Tablas pequeñas Lento
ALTER TABLE ... REBUILD Solo reconstruye Tablas grandes / particionadas Más rápido
ALTER TABLE ... FORCE Fuerza rebuild Tablas normales Rápido

Ejemplo práctico

-- Verificar espacio libre
SELECT TABLE_NAME, ENGINE, TABLE_ROWS, DATA_LENGTH, DATA_FREE 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'mi_base' 
AND TABLE_NAME = 'ventas';

-- Reconstruir
ALTER TABLE ventas REBUILD PARTITION ALL;

Cuándo usar REBUILD

  • Después de muchas inserciones, actualizaciones y borrados (alta fragmentación).
  • Después de eliminar una gran cantidad de datos.
  • Cuando DATA_FREE es muy alto en "information_schema.TABLES".
  • Para recuperar espacio en disco.
  • Como mantenimiento periódico en tablas particionadas.
  • Después de cambiar el motor de almacenamiento o configuración.
Durante el REBUILD, la tabla queda bloqueada (en InnoDB usa copia online en versiones recientes, pero aún así consume recursos). En MySQL 8.0+ es mucho más eficiente que en versiones anteriores. En tablas muy grandes (terabytes), es mejor hacerlo partición por partición.