所有碎片表的Mysql OPTIMIZE TABLE

Wie*_*zny 16 mysql optimization defragmentation fragmentation

我想要OPTIMIZE所有目前分散的表格.这些表应该有information_schema.DATA_FREE > 0.

是否可以在SQL中的一个命令中使用此属性优化所有表,或者我是否必须编写外部代码才能执行此操作?

小智 38

你可以这样做:

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

或者,如果第一个失败,请尝试:

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;
Run Code Online (Sandbox Code Playgroud)

  • 需要稍微修改才能为我工作,但很棒的方法.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认同)