MySQL有一个OPTIMIZE TABLE命令,可用于回收MySQL安装中未使用的空间。有没有办法(内置命令或通用存储过程)为数据库和/或服务器安装中的每个表运行此优化,或者这是您必须自己编写脚本的东西吗?
发布于 2011-03-30 00:10:16
发布于 2014-02-28 17:30:07
我写了这个“简单”的脚本:
set @tables_like = null;
set @optimize = null;
set @show_tables = concat("show tables where", ifnull(concat(" `Tables_in_", database(), "` like '", @tables_like, "' and"), ''), " (@optimize:=concat_ws(',',@optimize,`Tables_in_", database() ,"`))");
Prepare `bd` from @show_tables;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;
set @optimize := concat('optimize table ', @optimize);
PREPARE `sql` FROM @optimize;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;
set @show_tables = null, @optimize = null, @tables_like = null;要运行它,只需将其粘贴到连接到数据库的任何SQL IDE中。
注意:此代码不能在phpmyadmin上运行。
它是如何工作的
它运行一条show tables语句并将其存储在准备好的语句中。然后,它在选定的集合中运行optimize table。
您可以通过在var @tables_like (例如:set @tables_like = '%test%';)中设置不同的值来控制要优化的表。
发布于 2011-03-29 23:08:29
下面的示例php脚本可以帮助您优化数据库中的所有表
<?php
dbConnect();
$alltables = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_assoc($alltables))
{
foreach ($table as $db => $tablename)
{
mysql_query("OPTIMIZE TABLE '".$tablename."'")
or die(mysql_error());
}
}
?>https://stackoverflow.com/questions/5474662
复制相似问题