【问题标题】:How to delete a column from a MySQL big table如何从 MySQL 大表中删除一列
【发布时间】:2012-10-06 06:39:46
【问题描述】:

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

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

【问题讨论】:

  • 2.Would it be better to iterate in php before on each row and delete the value inside it? -- 绝对不行,在 mysql 本身做。
  • 首先在将在标准中使用的列上添加索引。并且不要使用 php。 php 会将其变量加载到 RAM 中,没有 RAM 可以同时处理 250 GB,因此您应该循环遍历肯定会比 mysql 操作花费更多时间的块。
  • @DainisAbols 但是不会需要~ 一天吗?
  • 您可以随时尝试克隆表。将用户重定向到新表并执行删除。之后将它们重定向回来。
  • PHP 实际上可以使用,但不能立即使用(不用于删除列)。这是一个相当大的 MySQL 操作,需要一些时间,通过删除 sql 中的列,DB 将在过程中变得不可用,而在 PHP 中执行 SET = null 延迟仍然会使 DB 可供其他同时用户使用。但是,当然,如果应该简单地删除该列,则不应使用 PHP。

标签: php mysql query-optimization


【解决方案1】:

为确保将停机时间降至最低,我会亲自备份并恢复到备用数据库,然后在再次恢复之前执行“删除列”。

  1. link

  2. 可能是这样,但我会说这需要更长的时间并且更容易出错。

  3. 是的,好主意,另外,考虑在手前使用 ANALYZE TABLE

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

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多