Gibt es einen Befehl, um alle MySQL-Tabellen einzeln automatisch zu optimieren?


8

Ich führe die folgende Befehlszeilenanweisung aus, um eine Tabelle zu optimieren: optimize table tablename;

Gibt es einen Befehl oder eine Anweisung, mit der alle Tabellen einzeln für die ausgewählte Datenbank optimiert werden können?

Antworten:



4

Sie können das Informationsschema verwenden, um die Anweisungen zu generieren, die Sie benötigen:

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

1

Sie können ein Skript erstellen und alle Tabellen in einer einzigen Zeile platzieren

ALLE TABELLEN IN DER AKTUELLEN DATENBANK

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

ALLE TABELLEN IN ALLEN BENUTZERDATENBANKEN

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

VERSUCHE ES !!!


Dies scheint auf meinem Server lange zu dauern und ich kann keinen Fortschritt sehen. Können Sie eine Ausgabe hinzufügen, welche Tabelle in der Schleife optimiert ist?
Rubo77

Ich habe Ihr Skript angepasst, um alle Datenbanken so zu optimieren, dass es einzeln
ausgeführt wird
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.