Php 如何从MySQL大表中删除列

Php 如何从MySQL大表中删除列,php,mysql,query-optimization,Php,Mysql,Query Optimization,我有一个250GB 500M行的MySQL表,希望删除其中的一列。 列为VARCHAR(255)。我希望在尽可能少的停机时间内执行此操作。想法: 我是否可以添加任何有助于此操作的配置 在每一行之前用php迭代并删除其中的值是否更好 之后是否需要优化表 这样一个程序的合理时间估计是多少 为了保证最小的停机时间,我会亲自备份并恢复到另一个数据库,然后在再次恢复之前执行“删除列” 可能是这样,但我认为这需要更长的时间,更容易出错 是的,好主意,也可以考虑使用前面的分析表 优化表格; 当DBMS脱机

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

  • 我是否可以添加任何有助于此操作的配置
  • 在每一行之前用php迭代并删除其中的值是否更好
  • 之后是否需要优化表
  • 这样一个程序的合理时间估计是多少

  • 为了保证最小的停机时间,我会亲自备份并恢复到另一个数据库,然后在再次恢复之前执行“删除列”

  • 可能是这样,但我认为这需要更长的时间,更容易出错

  • 是的,好主意,也可以考虑使用前面的分析表

    优化表格;
    当DBMS脱机进行计划维护时,应运行OPTIMIZE命令。该命令是非标准SQL。

    2.在对每一行执行之前,最好先在php中迭代,然后删除其中的值?
    --当然不是,在mysql中执行。首先在将在条件中使用的列上添加索引。不要用php来做。php将在RAM中加载它的变量,没有RAM可以同时处理250 GB的数据,因此您应该循环处理数据块,这肯定比mysql操作需要更多的时间。@DainisTools,但这不是需要~一天吗?您可以尝试克隆表。将用户重定向到新表并执行删除操作。之后,将它们重定向回原来的位置。PHP实际上可以使用,但不能立即使用(不能用于删除列)。这是一个相当大的MySQL操作,需要一些时间,通过在sql中删除列,数据库将在过程中变得不可用,而在PHP中执行SET=null时,延迟会使数据库对其他同时使用的用户可用。但是,当然,如果只是删除该列,就不应该使用PHP。