更改HUGE表中列的数据类型。性能问题

时间:2012-06-12 11:30:45

标签: mysql alter

我想在我的桌子上运行它:

ALTER TABLE table_name MODIFY col_name VARCHAR(255)

但我的桌子很大,它有超过65M(6500万)行。现在,当我执行时,执行此命令需要将近50分钟。有没有更好的方法来改变表?

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

嗯,你需要

 ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)

但是,你是对的,需要一段时间才能做出改变。确实没有更快的方法来改变MySQL中的表格。

您在改变期间是否关注停机时间?如果是这样,这可能是一种方法:将表复制到新表,然后更改副本上的列名,然后重命名副本。

您可能已经发现在生产系统中的表格中经常更改列名并不是一个好主意。

答案 2 :(得分:0)

使用Oak可以在不停机的情况下处理架构更改。

oak-online-alter-table复制原始表的架构,应用您的更改然后复制数据。当橡木在原始表上放置一些触发器时,仍然可以调用CRUD操作,因此在操作期间不会丢失任何数据。

请参阅other question,其中oak的作者提供了有关此机制的详细说明,并提出了其他工具。