【发布时间】:2012-10-06 06:39:46
【问题描述】:
我有一个 250GB 500M 行的 MySQL 表,想删除其中的一列。 该列是 VARCHAR(255)。我想以尽可能少的停机时间来执行此操作。想法:
- 我可以添加任何有助于此操作的配置吗?
- 在每行之前在php中迭代并删除其中的值会更好吗?
- 之后是否需要 OPTIMIZE TABLE?
- 对于这样的程序,合理的时间估计是多少?
【问题讨论】:
-
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