用计划任务自动优化数据库

标签:Discuz!, PHP

因为老是要去后台手动优化,所以就弄了这个。
虽然用的是MySQL自己的优化表的语句,但不敢保证绝对安全,使用前请先备份数据库。
比discuz后台的优化多了个好处,可以优化所有表,包括uc和你自定义的。

把以下的内容保存为optimize_db.inc.php,放入include/crons文件夹下,再去后台设置计划任务即可。
<?php
if(!defined('IN_DISCUZ'))
exit('Access Denied');

$query = $db->query("SHOW TABLE STATUS WHERE Data_free > 0 AND Engine <> 'MEMORY'");
//如果数据库是MySQL 4.1.2之前的版本,应把Engine改为Type
while($table = $db->fetch_array($query)) {
	$db->query("OPTIMIZE TABLE $table[Name]");
}
?>
顺便解释下原理:
  1. SHOW TABLE STATUS获取所有表。如果只想优化discuz的,请在后面插入LIKE '$tablepre%',并确保前后至少有个空格。
  2. Data_free > 0判断是否有冗余字节。
  3. Engine <> 'MEMORY判断是否是内存表(是则不优化)。请注意MySQL的版本。
  4. OPTIMIZE TABLE $table[Name]执行优化。只能用于MyISAM、BDB和InnoDB类型的表(MySQL 4.1.2之前的版本似乎不支持优化InnoDB)。不过即使不是上述类型,执行这句SQL也没关系,因为不会产生任何作用。

0条评论 你不来一发么↓

    想说点什么呢?