如何从 MySQL 大表中删除一列

3

我有一个250GB,500M行的MySQL表格,想要删除其中一个列。该列是VARCHAR(255)。 我希望在尽可能少的停机时间内执行此操作。以下是我的思考:

  1. 是否有任何配置可以添加来帮助此操作?
  2. 在每一行之前是否更好地在PHP中进行迭代并删除其中的值?
  3. 这是否需要之后进行OPTIMIZE TABLE操作?
  4. 对于这样的过程,合理的时间估计是多少?

绝对不是,在mysql中完成它。 - TZHX
首先,在将要用于条件的列上添加索引。不要使用php来完成这个任务。php会将其变量加载到RAM中,没有足够的RAM可以同时处理250GB的数据,因此您应该循环遍历块,这肯定需要比mysql操作更长的时间。 - Leri
@DainisAbols 但这不会需要大约一天吗? - Noam
你可以尝试克隆表格。将用户重定向到新表格并执行删除操作。之后将他们重定向回来。 - Peon
PHP可以使用,但不能一次性使用(不适用于删除列)。这是一个相当大的MySQL操作,需要一些时间,在SQL中删除列会使数据库在过程中变得不可用,而在PHP中执行SET = null并带有延迟仍将使数据库对其他同时用户可用。但是,如果只需删除列,则不应使用PHP。 - Marcus
1个回答

0

为了确保最小的停机时间,我个人会备份并恢复到另一个数据库,然后执行“删除列”操作,再次进行恢复。

  1. 链接

  2. 这可能是一种方法,但我认为它需要更长的时间,并且更容易出现错误。

  3. 是的,好主意,此外,请考虑在之前使用ANALYZE TABLE。

OPTIMIZE TABLE; 当DBMS处于离线计划维护状态时,应运行OPTIMIZE命令。该命令是非标准SQL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接