使用mysql innodb重命名巨型表时的最佳实践,当已存在同名表时

时间:2012-10-12 10:07:46

标签: mysql sql performance database-performance sqlperformance

我使用Mysql 5.5 .. + INNODB和Windows服务器。

案例(简单,然后是真实案例):

我有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;

解决方案3(截断快速删除表并创建空表然后可能会非常快地删除操作):

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;

哪种解决方案最好,为什么还是请写其他更好的解决方案?

由于

4 个答案:

答案 0 :(得分:5)

我不明白你为什么要DROP这个桌子。你总是想要那两张桌子而你(我假设要重新填满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;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

RENAME TABLE文档中所述:

  

RENAME TABLE重命名一个或多个表。重命名操作从左到右执行。

您可以在单个查询中执行多个表重命名,而不是运行多个查询来重命名:

RENAME TABLE car TO temp_car, new_car TO car
DROP TABLE temp_car

尽管请注意,这样的表重命名可能会导致锁定/延迟问题几秒钟。这是否可以接受取决于您的应用程序。

答案 3 :(得分:-2)

使用替换它需要5分钟 要么 使用Load infile进行批量处理