首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL是否优化所有表?

MySQL是否优化所有表?
EN

Stack Overflow用户
提问于 2011-03-29 23:01:33
回答 15查看 381.6K关注 0票数 274

MySQL有一个OPTIMIZE TABLE命令,可用于回收MySQL安装中未使用的空间。有没有办法(内置命令或通用存储过程)为数据库和/或服务器安装中的每个表运行此优化,或者这是您必须自己编写脚本的东西吗?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2011-03-30 00:10:16

您可以在命令行中使用mysqlcheck来完成此操作。

一个数据库:

代码语言:javascript
复制
mysqlcheck -o <db_schema_name>

所有数据库:

代码语言:javascript
复制
mysqlcheck -o --all-databases
票数 449
EN

Stack Overflow用户

发布于 2014-02-28 17:30:07

我写了这个“简单”的脚本:

代码语言:javascript
复制
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%';)中设置不同的值来控制要优化的表。

票数 33
EN

Stack Overflow用户

发布于 2011-03-29 23:08:29

下面的示例php脚本可以帮助您优化数据库中的所有表

代码语言:javascript
复制
<?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());

   }
}

?>
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5474662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档