• MySQL 自動最佳化資料表 (optimize)

    by  • 2009/05/14 • linux • 1 Comment

    在 Mysql 5 以上就有提供這樣功能的程式可以用 ~~ 用法入下

    mysqlcheck --all-databases --optimize --auto-repair

    那我們將它放到 Crontab 裡排程, 這樣就可以讓他自動執行囉 ~~

    設定每天早上 1:05 執行

    5 1 * * * /usr/bin/mysqlcheck --all-databases --optimize --auto-repair > /dev/null 2>&1

    那沒有提供 mysqlcheck 的 Mysql 版本可以用以下的 php 程式來 Run

    <?php
    $dbh = mysql_connect('DB_SERVER_IP', 'DB_ROOT_ID', 'DB_ROOT_PASS');
    $resource = mysql_query('SHOW DATABASES', $dbh);
    //echo 'Found ' . mysql_num_rows($resource) . " databases.</br>";
    while ($db_t = mysql_fetch_assoc($resource)) {
    $db_name = $db_t['Database'];
    // echo "<font color="#FF0000">Database : $db_name</font></br>";
    mysql_select_db($db_name, $dbh);
    $r = mysql_query('SHOW TABLE STATUS', $dbh);
    while ($t = mysql_fetch_assoc($r)) {
    // echo $t['Name']."<br>";
    if ($t['Data_free'] > 0) {
    // echo $t['Name'] . " optimization.n";
    mysql_query('OPTIMIZE TABLE ' . $t['Name'], $dbh) or die(mysql_error());
    }
    }
    }
    ?>

    把這個程式碼存成 optimize.php, 設定 Crontab 在早上 1:50 執行

    50 1 * * * /usr/bin/php /var/www/html/kiss/optimize.php

    這樣, DB 每天都是最佳化的資料表囉, 當資料小的時候沒感覺, 大的時候, 整體會快很多喔 ~~

    • Infomation_Artist

      To 拆組達人 提到…

      基本上, 只要你的 DB 是用 Mysql 的話, 都可受用 ~~