我在MySQL中有一个InnoDB表,它曾经包含大约600k行。删除400k +行后,我的猜测是我需要运行OPTIMIZE。
但是,由于在此操作期间表将被锁定,因此该站点在此时将无法使用。所以,我的问题是:我应该在实时数据库表上运行优化(略低于20万行)吗?或者是否可以创建该表的副本,在该副本上运行OPTIMIZE,然后重命名两个表,以便将数据复制回实时表?
答案 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;