我想在我的桌子上运行它:
ALTER TABLE table_name MODIFY col_name VARCHAR(255)
但我的表很大,它有超过 65M(6500 万)行。现在当我执行时,执行这个命令需要将近 50 分钟。有什么更好的方法来改变表?
嗯,你需要
ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)
但是,你是对的,做出改变需要一段时间。确实没有更快的方法来更改 MySQL 中的表。
您担心变更期间的停机时间吗?如果是这样,这是一种可能的方法:将表复制到新表,然后更改副本上的列名,然后重命名副本。
您可能已经发现,在生产系统中定期更改表中的列名并不是一个好主意。
使用 percona 工具包的另一个变体 https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html
您可以使用 Oak 处理架构更改而无需停机。
Oak-online-alter-table复制原始表的模式,应用您的更改,然后复制数据。由于 Oak 在原始表上放置了一些触发器,因此仍然可以调用 CRUD 操作,因此在操作期间不会丢失任何数据。
请参考其他问题,其中橡木的作者详细解释了这种机制并建议了其他工具。