3

すべての MyISAM テーブルを最適化する方法を理解するためにhttp://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.htmlを読んでいますが、それを取得できないようです。ハンド スクリプトのように見えましたが、動作させることができず、実際に理解したいと思っています。

これは私が出会ったものです:

for i in mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'; do mysql -e "optimize table $i"; done

しかし、ドキュメントに記載されている内容に沿って何かを使用することは素晴らしいことですがmysqloptimize --all-databases、InnoDBテーブルを最適化しようとは絶対に望んでいません..

ポインタはありますか?

ありがとう

4

1 に答える 1

1

保存されたルーチンを使用して、テーブルを最適化できます。ただし、明らかに、これを実行するにはmysqlサービスが必要です。保存されたルーチンのサンプルを以下に示します。この手順で定義されたカーソルは、現在のデータベース(このspが定義されている)内からすべてのテーブルを選択します。次の例のように、WHEREの条件でMYISAMテーブルをチェックするための条件を追加できます。

DELIMITER //
CREATE PROCEDURE util_optimize_all_tables()
SQL SECURITY INVOKER
BEGIN
    DECLARE endloop INT DEFAULT 0;
    DECLARE tableName CHAR(100);
    DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME`
        FROM `information_schema`.`TABLES`
        WHERE `TABLE_SCHEMA` = DATABASE() AND `ENGINE`='MyISAM';
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop = 1;

    OPEN rCursor;
    FETCH rCursor INTO tableName;

    WHILE endloop = 0 DO
        SET @sql = CONCAT('OPTIMIZE TABLE `', tableName, '`;');
        PREPARE statement FROM @sql;
        EXECUTE statement;

        FETCH rCursor INTO tableName;
    END WHILE;

    CLOSE rCursor;
END//
DELIMITER ;
于 2012-09-05T07:09:55.487 に答える