MySQL OPTIMIZAR todas las tablas?

Resuelto Alana Storm asked hace 13 años • 17 respuestas

MySQL tiene un comando OPTIMIZE TABLE que se puede utilizar para recuperar espacio no utilizado en una instalación de MySQL. ¿Hay alguna forma (comando integrado o procedimiento almacenado común) de ejecutar esta optimización para cada tabla en la base de datos y/o instalación del servidor, o es algo que tendría que crear mediante un script usted mismo?

Alana Storm avatar Mar 29 '11 22:03 Alana Storm
Aceptado

Puede utilizar mysqlcheckpara hacer esto en la línea de comando.

Una base de datos:

mysqlcheck -o <db_schema_name>

Todas las bases de datos:

mysqlcheck -o --all-databases
Ike Walker avatar Mar 29 '2011 16:03 Ike Walker

Hice este script "simple":

set @tables_like = null;
set @optimize = null;
set @show_tables = concat("show tables where", ifnull(concat(" `Tables_in_", database(), "` like '", @tables_like, "' and"), ''), " (@optimize:=concat_ws(',',@optimize,`Tables_in_", database() ,"`))");

Prepare `bd` from @show_tables;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;

set @optimize := concat('optimize table ', @optimize);
PREPARE `sql` FROM @optimize;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;

set @show_tables = null, @optimize = null, @tables_like = null;

Para ejecutarlo, simplemente péguelo en cualquier IDE SQL conectado a su base de datos.

Aviso: este código NO funcionará en phpmyadmin.

Cómo funciona

Ejecuta una show tablesdeclaración y la almacena en una declaración preparada. Luego ejecuta a optimize tableen el conjunto seleccionado.

Puede controlar qué tablas optimizar estableciendo un valor diferente en la var @tables_like(por ejemplo:) set @tables_like = '%test%';.

Ismael Miguel avatar Feb 28 '2014 09:02 Ismael Miguel