php 实现 mysql数据表优化与修复

<?php
$link = mysql_connect("localhost", "root", "") or die("errro:" . mysql_error());
mysql_query("set names utf8");
mysql_select_db("数据库名", $link);

/*
// 展示数据表相关信息
$sql = "show table status";
$res = mysql_query($sql,$link);
while($row = mysql_fetch_assoc($res))
{
    
    $row = Array
    (
        [Name] => 表名称
        [Engine] => 表的存储引擎
        [Version] => 版本
        [Row_format] => 行格式。对于MyISAM引擎,这可能是Dynamic,Fixed或Compressed。动态行的行长度可变,例如Varchar或Blob类型字段。固定行是指行长度不变,例如Char和Integer类型字段。
        [Rows] =>  表中的行数。对于非事务性表,这个值是精确的,对于事务性引擎,这个值通常是估算的
        [Avg_row_length] => 平均每行包括的字节数
        [Data_length] => 整个表的数据量(单位:字节)
        [Max_data_length] => 表可以容纳的最大数据量
        [Index_length] => 索引占用磁盘的空间大小
        [Data_free] => 对于MyISAM引擎,标识已分配,但现在未使用的空间,并且包含了已被删除行的空间。
        [Auto_increment] => 下一个Auto_increment的值
        [Create_time] =>  表的创建时间
        [Update_time] =>  表的最近更新时间
        [Check_time] => 使用 check table 或myisamchk工具检查表的最近时间
        [Collation] => 表的默认字符集和字符排序规则
        [Checksum] => 如果启用,则对整个表的内容计算时的校验和
        [Create_options] => 指表创建时的其他所有选项
        [Comment] => 包含了其他额外信息,对于MyISAM引擎,包含了注释徐标新,如果表使用的是innodb引擎 ,将现实表的剩余空间。如果是一个视图,注释里面包含了VIEW字样。
    )
    
}
*/


$sql = "OPTIMIZE TABLE 数据表名";
$res = mysql_query($sql,$link);
while($row = mysql_fetch_assoc($res))
{
    /**
    $row = Array
    (
        [Table] => 数据库.数据表名
        [Op] => optimize
        [Msg_type] => status
        [Msg_text] => Table is already up to date
    )
    */
    if ($row['Msg_type'] =='error' && strpos($row['Msg_text'], 'repair') !== false)
    {
        mysql_query('REPAIR TABLE 数据表名', $link);
    }
    
}

 

posted @ 2016-01-21 22:06  好记性还真不如烂笔头  阅读(489)  评论(0编辑  收藏  举报