mysql - 当同名表已存在时,mysql innodb 重命名大表的最佳实践

标签 mysql sql performance database-performance sqlperformance

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

案例(先简单后真实):

我有 2 个 1GB 的表,名称为 new_carcar 表 1GB。

我每 10 小时用 new_car 表替换 car 表,而不是手动(通过代码自动)- 重要的是要快(真实网站数据)。

我读到(说在 innodb 中删除它的问题):http://www.mysqlperformanceblog.com/2011/02/03/performance-problem-with-innodb-and-drop-table/

解决方案一:

DROP TABLE car;
RENAME TABLE new_car TO car;

解决方案2(在最后进行drop - 也许它不会阻止在drop期间发生的表访问):

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; 

解决方案4:

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

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

谢谢

最佳答案

我不明白你为什么要 DROP 表格。您总是想要那 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;

关于mysql - 当同名表已存在时,mysql innodb 重命名大表的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12856783/

相关文章:

CSS 和滚动性能

更新特定列上的 SQL Server 触发器

sql - 我怎样才能使这个查询更有效地检测多个帐户并与 has_many 一起玩?

Mysql根据前缀计算总内存

php - 我怎样才能获得搜索结果以与分页一起使用?

mysql - 从另一个具有不同列数的表中插入表(MySQL)

sql - DEFAULT 约束在 SQL Oracle 中不起作用?

c# - 从另一个类继承的类的构造函数是否效率较低?

php - 用于在 MySQL 中的密码末尾附加另一个字段值(此处为 id)

MySQL:如何根据位置获取记录