Esiste un comando per ottimizzare automaticamente tutte le tabelle MySQL una per una?


8

Eseguo sotto la riga di comando per ottimizzare una tabella: optimize table tablename;

Esiste un comando o un'istruzione che può ottimizzare tutte le tabelle una per una del database selezionato?

Risposte:



4

È possibile utilizzare lo schema di informazioni per generare le istruzioni necessarie:

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

1

Puoi copiarlo e posizionare tutte le tabelle su un'unica riga

TUTTE LE TABELLE NEL DATABASE ATTUALE

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}"

TUTTE LE TABELLE IN TUTTI I DATABASI UTENTE

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}"

PROVACI !!!


Questo sembra richiedere molto tempo sul mio server e non riesco a vedere l'aprogresso. puoi aggiungere qualche output quale tabella è ottimizzata nel ciclo?
rubo77,

Mi sono adattato lo script per ottimizzare tutti i database per cui è gestito uno per uno: stackoverflow.com/a/33541722/1069083
rubo77
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.