我想在我的表运行此:更改HUGE表中列的数据类型。性能问题
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
但我的表是巨大的,它比65M以上(65亿美元)的行。现在当我执行的时候,执行这个命令需要将近50分钟。任何更好的方式来改变表?
我想在我的表运行此:更改HUGE表中列的数据类型。性能问题
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
但我的表是巨大的,它比65M以上(65亿美元)的行。现在当我执行的时候,执行这个命令需要将近50分钟。任何更好的方式来改变表?
那么,你需要
ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)
但是,你是正确的,这需要一段时间来进行更改。真的没有更快的方式来改变MySQL中的表格。
在变更过程中,您担心停机吗?如果是这样,这里有一种可能的方法:将表格复制到新的表格中,然后更改副本上的列名称,然后重命名该副本。
您可能已经想通过在生产系统中常规更改表中的列名不是一个好主意。
您可以使用Oak处理模式更改而无需停机。
oak-online-alter-table复制原始表的模式,应用您的更改并复制数据。 CRUD操作仍然可以被调用,因为橡木会在原始表格上放置一些触发器,因此在操作过程中不会丢失任何数据。
请参考other question橡木的作者给出了关于这种机制的详细解释,并且还提出了其他工具。
另一种变体使用的Percona工具包 https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html
不,这将是缓慢的。 ALTER语句是一次性操作。等一下,希望你不需要再做一次。 –
巨大的桌子?没有。很大?是。 –