如何将列正常添加到超过100K记录的mysql表中?

时间:2018-01-31 12:13:48

标签: mysql toad alter

正如上面标题normally中所指出的,我所做的并不是改变表格以添加一列的正常方法。

我们正在使用MySql 5.5Toad来执行数据库操作。有一个表appln_doc有近300K的记录存储申请人的文件,如图像和太大的。

现在我们必须添加is_signature类型的新列tinyint。我们尝试了三种不同的方式

  1. 在内置配置中使用Toads - 双击表格,将在列标签下的新窗口中添加一个包含名称,类型和大小的新列,然后单击“更改”按钮。
  2. 在toad中使用alter table query。
  3. 使用putty我们记录在mysql内并执行相同的查询。
  4. 这三项努力都导致同样的问题Fixing “Lock wait timeout exceeded; try restarting transaction” for a 'stuck" Mysql table。所以我们试图杀死等待进程并再次尝试改变表格,结果仍然相同。

    我们再次终止了该进程并重新启动了mysql服务器并再次尝试添加该列,但问题仍然存在。

    最后,我们将所有表格数据导出到Excel工作表并截断表格。之后,当我们尝试添加该列时,它成功了。然后,使用新列is_signature添加了导出的Excel工作表,其中所有值均为0,作为新列的默认值。然后我们再次将该数据导出回表中。这就是为什么我说我没有在normal way中添加列。

    那么有没有人遇到这样的情况并且有比这更好的解决方案?任何人都可以告诉为什么会发生这种情况是因为存储在该表中的数据的大小和大小?

    PS:表appln_doc有一个没有数据的子表appln_doc_details。只有此表在更改时出现问题。

1 个答案:

答案 0 :(得分:3)

在一天结束时,无论您使用什么工具,都归结为以下两种情况之一:

  1. alter table声明
  2. 创建新表/复制数据/删除旧表/重命名新表。
  3. 第一个通常更快,第二个通常更灵活(桌面有些东西不能改变)。

    无论哪种方式,处理这么多数据只需要花费很多时间,而且你无法真正做到这一点。

    从好的方面来说,几乎所有的超时都可在某处配置。我不知道如何配置这个特定的,但我99%肯定你可以。了解如何并将其增加到足够大。对于300K记录,我认为操作大约需要10分钟或更短时间,但当然这取决于。设置为10小时。 :)