Existe algum comando para otimizar todas as tabelas do MySQL uma por uma automaticamente?


8

Eu executo a instrução de linha de comando abaixo para otimizar uma tabela: optimize table tablename;

Existe algum comando ou instrução que possa otimizar todas as tabelas uma a uma do banco de dados selecionado?

Respostas:



4

Você pode usar o esquema de informações para gerar as instruções necessárias:

SELECT Concat('OPTIMIZE TABLE ',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES 
   WHERE table_schema='yourdb';

1

Você pode criar um script e colocar todas as tabelas em uma única linha

TODAS AS TABELAS DA BASE DE DADOS ATUAL

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQL_DATA=mydb
TBLLIST=""
COMMA=""
SQL="SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE()"
for TBL in `mysql ${MYSQL_CONN} -D${MYSQL_DATA} -ANe"${SQL}"`
do
    TBLLIST="${TBLLIST}${COMMA}${TBL}"
    COMMA=","
done
SQL="OPTIMIZE TABLE ${TBLLIST};"
mysql ${MYSQL_CONN} -D${MYSQL_DATA} -ANe"${SQL}"

TODAS AS TABELAS EM TODAS AS BASES DE DADOS DO USUÁRIO

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
TBLLIST=""
COMMA=""
SQL="SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE"
SQL="${SQL} table_schema NOT IN ('information_schema','mysql','performance_schema')"
for DBTB in `mysql ${MYSQL_CONN} -ANe"${SQL}"`
do
    TBLLIST="${TBLLIST}${COMMA}${DBTB}"
    COMMA=","
done
SQL="OPTIMIZE TABLE ${TBLLIST};"
set -x
mysql ${MYSQL_CONN} -ANe"${SQL}"

DE UMA CHANCE !!!


Isso parece demorar muito no meu servidor e não consigo ver um progresso. você pode adicionar alguma saída que tabela é otimizada no loop?
rubo77

Eu adaptei seu script para otimizar todos os bancos de dados para que seja executado um por um: stackoverflow.com/a/33541722/1069083
rubo77
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.