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.