MySQL OPTIMIZAR todas las tablas?
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?
Puede utilizar mysqlcheck
para 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
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 tables
declaración y la almacena en una declaración preparada. Luego ejecuta a optimize table
en el conjunto seleccionado.
Puede controlar qué tablas optimizar estableciendo un valor diferente en la var @tables_like
(por ejemplo:) set @tables_like = '%test%';
.