2012-10-12 20 views
1

我使用Mysql 5.5 .. + INNODB和Windows服務器。最佳做法與MySQL innodb重命名巨大的表,當同名表已存在

的情況下(使簡單則真實案例):

我有2個表1GB與名new_carcar表1GB。

我用10小時不用手動(代碼自動)替換car表格new_car表 - 重要的是快速(真實的網站數據)。

我看(說放棄其在InnoDB的問題):http://www.mysqlperformanceblog.com/2011/02/03/performance-problem-with-innodb-and-drop-table/

解決方法1:

DROP TABLE car; 
RENAME TABLE new_car TO car; 

溶液2(最終使下降 - 也許它不會阻止訪問表下降過程中所發生):

RENAME TABLE car TO temp_car; 
RENAME TABLE new_car TO car; 
DROP TABLE temp_car; 

Solution3(截斷快速刪除表和創建空表,那麼也許以後下降動作要非常快):

TRUNCATE TABLE car; 
DROP TABLE car; 
RENAME TABLE new_car TO car; 

Solution4:

RENAME TABLE car TO temp_car; 
RENAME TABLE new_car TO car; 
TRUNCATE TABLE temp_car; 
DROP TABLE temp_car; 

哪個解決方案是最好的,爲什麼還是請大家寫其他更好的解決辦法?

謝謝

+2

設置開發和測試環境並測試它 – MatBailie

+0

[請參閱此鏈接](http://dev.mysql.com/doc/refman/5.0/en/rename-table.html)我們可以改變表格名似乎在做任何事之前都有備份副本 – gks

+0

在我問這個問題之前,我閱讀了上面的鏈接,謝謝 – Yosef

回答

4

我不明白你爲什麼要丟表。你總是希望那些2個表和你(我認爲是補充了New_Car表...

RENAME TABLE car TO temp_car; 
RENAME TABLE new_car TO car; 
TRUNCATE TABLE temp_car; 
RENAME TABLE temp_car TO new_car; 
-2

使用更換成它需要像5分鐘 或 使用負載INFILE批量它

0
RENAME TABLE car TO temp_car, new_car TO car; 
TRUNCATE TABLE temp_car; 
DROP TABLE temp_car;