2011-12-28 76 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