在表副本上运行优化?

lib*_*eco 3 mysql optimization

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

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

gbn*_*gbn 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;
Run Code Online (Sandbox Code Playgroud)