mysql innodb的最佳做法是在存在具有相同名称的表时重命名巨大的表

问题描述 投票:2回答:4

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

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

我有两个表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;

Solution2(最终删除-可能不会阻止该表访问删除期间发生的事件):

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; 

解决方案4:

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

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

谢谢

mysql sql performance database-performance sqlperformance
4个回答
5
投票

我不明白您为什么要放弃桌子。您总是想要那两个表,然后(我想重新填充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;

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

0
投票

RENAME TABLE文档中所述:

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

代替运行多个查询以进行重命名,您可以在单个查询中执行多个表重命名,如下所示:

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

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


-2
投票

使用replace into大约需要5分钟要么使用[载入infile]进行批量处理

© www.soinside.com 2019 - 2024. All rights reserved.