2011-12-28 68 views
3

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

然而,由于该表将在操作过程中被锁定,该网站将不会在那个时候使用。所以,我的问题是:我应该在实时数据库表上运行优化(有少于200k行)?或者是否可以创建该表的副本,在该副本上运行OPTIMIZE,然后重命名这两个表,以便将数据复制回实时表?

+0

200K行不算多,你应该做的相当快,但他说什么@gbn是要走的路。 – 2011-12-28 10:55:31

回答

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; 
+0

工作完美!谢谢! – libeco 2011-12-28 11:33:55