2017-06-22 53 views
0

我想從MyISAM更改200萬行表的引擎到InnoDB。我害怕這種長時間的操作,所以我創建了類似結構的InnoDB表,現在我想將舊數據的所有數據都複製到這個新數據表中。什麼是最快的方式? SELECT INSERT?那麼START TRANSACTION呢?請幫忙。我不想掛我的服務器。MySQL更改引擎千萬行表

+0

安排停機時間。 – ajreal

回答

0

幫你一個忙:將整個設置複製到你的本地機器,並嘗試一切。你將會更好地瞭解你正在進入的領域。只需注意生產服務器和本地計算機之間硬件的潛在差異。

最快的方式可能是最簡單的方法:

INSERT INTO table2 SELECT * FROM table1; 
0

我懷疑你不能做任何比內置在ALTER更快。它必須複製所有數據並重建所有索引。

請務必提供innodb_buffer_pool_size以準備InnoDB。和更低的空間key_buffer_size。分別建議RAM的35%和12%用於轉換。所有表格轉換後,建議70%和20MB。

一個輕微的加速是做一些選擇,提取整個表和整個PRIMARY KEY(如果它可以被緩存)。這會在真正開始之前做一些I/O操作。例如:SELECT avg(id) FROM tbl其中id是主鍵。 SELECT avg(foo) FROM tbl其中foo未編入索引,但爲數字。這將強制對PK索引和數據進行全面掃描,從而緩存ALTER必須讀取的內容。

其他轉換提示:http://mysql.rjweb.org/doc.php/myisam2innodb