すべてのMySQLテーブルを1つずつ自動的に最適化するコマンドはありますか?


8

以下のコマンドラインステートメントを実行して、テーブルを最適化します。 optimize table tablename;

選択したデータベースの1つずつすべてのテーブルを最適化できるコマンドまたはステートメントはありますか?

回答:


14

通常、mysqlcheckを--optimizeと--databasesの組み合わせで使用します。mysqlcheckは、管理者がテーブルをチェック、最適化、修復するためのコマンドラインインターフェイスです。

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

MySQLのドキュメントは次のとおりです。http//dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html

マックス。



4

情報スキーマを使用して、必要なステートメントを生成できます。

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

1

スクリプトを作成して、すべてのテーブルを1行に配置できます

現在のデータベースのすべてのテーブル

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

すべてのユーザーデータベースのすべてのテーブル

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

試してみる !!!


これは私のサーバーで長い時間がかかるようで、進行状況がわかりません。ループで最適化されているテーブルを出力に追加できますか?
rubo77 2015年

私は、それが一つずつ実行されるように、すべてのデータベースを最適化するためのスクリプトを適応:stackoverflow.com/a/33541722/1069083
rubo77
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.