我想要OPTIMIZE
所有当前碎片表。这些表应该有information_schema.DATA_FREE > 0
。所有碎片表的Mysql优化表
是否有可能在SQL中的一个命令中使用此属性优化所有表,还是必须编写外部代码才能执行此操作?
我想要OPTIMIZE
所有当前碎片表。这些表应该有information_schema.DATA_FREE > 0
。所有碎片表的Mysql优化表
是否有可能在SQL中的一个命令中使用此属性优化所有表,还是必须编写外部代码才能执行此操作?
你可以做这样的事情:
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;
没关系,这是一个老帖子,但这是必要的。
菲尔Dufault http://www.dufault.info/blog/a-script-to-optimize-fragmented-tables-in-mysql/ 写了一个完美的事情,脚本,那就是在GitHub上: https://github.com/pdufault/mysqlfragfinder/blob/master/mysqlfragfinder.sh
vim mysqlfragfinder.sh
#copy paste from github
chmod +x ./mysqlfragfinder.sh
./mysqlfragfinder.sh --user root_username --password root_password
,这是所有。 现在已经在很多服务器上使用它了。
我知道有一个答案。但MySQL有此建议,对于InnoDB数据库的:
它可以加快索引扫描,如果你定期地执行“零” ALTER TABLE操作,这导致MySQL重建表:
ALTER TABLE tbl_name ENGINE=INNODB
发现这里 http://dev.mysql.com/doc/refman/5.0/en/innodb-file-defragmenting.html
为我工作所需的微小变化,但伟大的方法。 (“OPTIMIZE TABLE”,table_schema,“。”,table_name,“;”)FROM information_schema.tables WHERE DATA_FREE> 0 INTO OUTFILE'/tmp/optimize.sql'; SOURCE /tmp/optimize.sql; – 2010-05-26 13:11:26