对所有碎片化的表进行Mysql OPTIMIZE TABLE优化

17

我希望能够优化所有当前碎片化的表。这些表应该具有information_schema.DATA_FREE > 0

在SQL中是否可以使用一个命令来优化所有具有此属性的表,还是我需要编写外部代码来完成这个任务?

3个回答

39

你可以像这样做:

SELECT concat("OPTIMIZE TABLE ", table_schema,".",table_name,";")
FROM tables
WHERE DATA_FREE > 0
INTO OUTFILE '/tmp/optimize.sql';
SOURCE '/tmp/optimize.sql';

如果第一个方法失败了,可以尝试以下方法:

SELECT concat("OPTIMIZE TABLE ", table_schema,".",table_name,";")
FROM information_schema.tables
WHERE DATA_FREE > 0
INTO OUTFILE '/tmp/optimize.sql';
SOURCE /tmp/optimize.sql;

9
对我来说需要做一些微小的改动,但方法很好。从information_schema.tables中选择DATA_FREE大于0的表,并使用concat函数连接"OPTIMIZE TABLE "、table_schema和table_name,生成一个语句并输出到'/tmp/optimize.sql'文件中。然后执行该文件中的语句,以优化这些表。 - El Yobo
你需要在 table_schema 和 table_name 周围加上一些反引号,否则我欠你一瓶啤酒,非常感谢。 - Question Mark

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接