在表副本上运行优化?

时间:2011-12-28 10:43:38

标签: mysql optimization

我在MySQL中有一个InnoDB表,它曾经包含大约600k行。删除400k +行后,我的猜测是我需要运行OPTIMIZE。

但是,由于在此操作期间表将被锁定,因此该站点在此时将无法使用。所以,我的问题是:我应该在实时数据库表上运行优化(略低于20万行)吗?或者是否可以创建该表的副本,在该副本上运行OPTIMIZE,然后重命名两个表,以便将数据复制回实时表?

1 个答案:

答案 0 :(得分:6)

如果您创建了副本,那么如果您执行CREATE TABLE..AS SELECT..,则应该对其进行优化。无需单独运行

但是,我会考虑复制200k行以保存到新表中,然后重命名表。 这样就可以减少步骤,减少工作量。

CREATE TABLE MyTableCopy AS
SELECT *
FROM myTable
WHERE (insert Keep condition here);

RENAME TABLE
    myTable TO myTable_DeleteMelater, 
    MyTableCopy TO myTable;