mysql.h


OPTIMIZE TABLE

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name]...

OPTIMIZE TABLE debe usarse si se ha eliminado gran parte de una tabla o si se han hecho muchos cambios en una tabla con filas de tamaño variable (tablas que contengan columnas VARCHAR, BLOB o TEXT). Los registros borrados se mantienen en una lista enlazada y subsiguientes operaciones INSERT hacen uso de las posiciones de anteriores registros. Se puede usar OPTIMIZE TABLE to recuperar el espacio no usado y para desfragmentar el fichero de datos.

En la mayoría de los sistemas no será necesario ejecutar OPTIMIZE TABLE. Aunque se hagan muchas actualizaciones en filas de longitud variable no es probable que sea necesario hacerlo más de una vez al mes o a la semana, y sólo en ciertas tablas.

De momento, OPTIMIZE TABLE funciona sólo en tablas MyISAM y BDB. Para tablas BDB, OPTIMIZE TABLE se convierte en ANALYZE TABLE.

Se puede hacer que OPTIMIZE TABLE funcione con otros tipos de tabla arrancando mysqld con --skip-new o --safe-mode, pero en ese caso OPTIMIZE TABLE se ejecuta como ALTER TABLE.

OPTIMIZE TABLE trabaja del modo siguiente:

  • Si la tabla contiene filas borradas o divididas, repara la tabla.
  • Si las páginas de índices no están ordenadas, las ordena.
  • Si las estadísticas no están al día (y la reparación no puede realizarse ordenando el índice), las actualiza.

La tabla se bloquea durante el tiempo en que se ejecuta OPTIMIZE TABLE.

Antes de MySQL 4.1.1, los comandos OPTIMIZE no actualizaban el diario binario. Desde MySQL 4.1.1 lo hacen salvo que se use la palabra clave opcional NO_WRITE_TO_BINLOG (o si alias LOCAL).