Apakah ada perintah untuk mengoptimalkan semua tabel MySQL satu per satu secara otomatis?

8

Saya menjalankan pernyataan perintah di bawah ini untuk mengoptimalkan tabel: optimize table tablename;

Apakah ada perintah atau pernyataan yang dapat mengoptimalkan semua tabel satu per satu dari database yang dipilih?

ursitesion
sumber

Jawaban:

14

Saya biasanya menggunakan mysqlcheck dengan kombinasi --optimize dan --databases. mysqlcheck adalah antarmuka baris perintah untuk administrator untuk memeriksa, mengoptimalkan, dan memperbaiki tabel.

mysqlcheck -uroot -p --optimize --databases myDatabase

Berikut ini adalah dokumen MySQL: http://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html

Maks.

Maxime Fouilleul
sumber
Diskusi dipindahkan ke obrolan
ursitesion
4

Anda dapat menggunakan skema informasi untuk menghasilkan pernyataan yang Anda butuhkan:

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

Anda bisa membuat skrip dan menempatkan semua tabel pada satu baris

SEMUA TABEL DALAM DATABASE SAAT INI

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

SEMUA TABEL DALAM SEMUA DATABASE PENGGUNA

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

COBALAH !!!

RolandoMySQLDBA
sumber
Ini sepertinya memakan waktu lama di server saya dan saya tidak bisa melihat persetujuan. dapatkah Anda menambahkan beberapa output tabel mana yang dioptimalkan dalam loop?
rubo77
Saya mengadaptasi skrip Anda untuk mengoptimalkan semua basis data sehingga dijalankan satu per satu: stackoverflow.com/a/33541722/1069083
rubo77