我在MySQL中有一个InnoDB表,它包含大约600k行。删除400k +行后,我的猜测是我需要运行一个OPTIMIZE。运行表优化拷贝?
然而,由于该表将在操作过程中被锁定,该网站将不会在那个时候使用。所以,我的问题是:我应该在实时数据库表上运行优化(有少于200k行)?或者是否可以创建该表的副本,在该副本上运行OPTIMIZE,然后重命名这两个表,以便将数据复制回实时表?
我在MySQL中有一个InnoDB表,它包含大约600k行。删除400k +行后,我的猜测是我需要运行一个OPTIMIZE。运行表优化拷贝?
然而,由于该表将在操作过程中被锁定,该网站将不会在那个时候使用。所以,我的问题是:我应该在实时数据库表上运行优化(有少于200k行)?或者是否可以创建该表的副本,在该副本上运行OPTIMIZE,然后重命名这两个表,以便将数据复制回实时表?
如果您创建一个副本,那么应该已如果你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;
工作完美!谢谢! – libeco 2011-12-28 11:33:55
200K行不算多,你应该做的相当快,但他说什么@gbn是要走的路。 – 2011-12-28 10:55:31