如何将列正常添加到具有超过 100K 条记录的 mysql table 中?
How to add a column normally into a mysql table with more than 100K records?
如上述标题 normally
中所述,我所做的不是更改 table 以添加一列的正常方法。
我们正在使用 MySql 5.5
和 Toad
在数据库中进行操作。有一个 table appln_doc
有将近 300K 的记录存储申请人的文件,例如图像,而且尺寸也很大。
现在我们必须添加 tinyint
类型的新列 is_signature
。我们尝试了三种不同的方式
- 在内置配置中使用 Toads - 双击 table,一个新的 window 将在列选项卡下添加一个包含名称、类型和大小的新列,然后单击更改按钮。
- 在 toad 本身中使用 alter table 查询。
- 我们使用
putty
登录 mysql
并执行相同的查询。
这三项努力都会导致同一个问题Fixing “Lock wait timeout exceeded; try restarting transaction” for a 'stuck" Mysql table。所以我们试图杀死等待进程并再次尝试改变table,结果还是一样。
我们再次终止进程并重新启动 mysql
服务器并再次尝试添加列,问题仍然相同。
最后我们将所有 table 数据导出到 excel sheet 并截断了 table。之后,当我们尝试添加该列时,它成功了。然后导出的 excel sheet 添加了一个新列 is_signature
,其所有值都是 0
作为新列的默认值。然后我们再次将该数据导出回 table。这就是为什么我说我没有在 normal way
.
中添加列
那么有没有人遇到过这样的情况并且有比这更好的解决方案?谁能说出为什么会这样,是因为存储在 table 中的数据量大吗?
PS : table appln_doc
的 child table appln_doc_details
没有数据。只有这个 table 在更改时有问题。
归根结底,无论您使用什么工具,都归结为以下两种情况之一:
- 一个
alter table
语句
- 新建table/copydata/delete旧table/rename新建table.
第一个通常更快,第二个通常更灵活(有些东西 table 不能更改)。
无论哪种方式,处理这么多数据都需要花费大量时间,而且您对此无能为力。
好的一面是,几乎所有超时都可以在某处配置。我不知道如何配置这个特定的,但我 99% 确定你可以。找出方法并将其增加到足够大。对于 300K 条记录,我认为操作大约需要 10 分钟或更短时间,但这当然要视情况而定。将其设置为 10 小时。 :)
如上述标题 normally
中所述,我所做的不是更改 table 以添加一列的正常方法。
我们正在使用 MySql 5.5
和 Toad
在数据库中进行操作。有一个 table appln_doc
有将近 300K 的记录存储申请人的文件,例如图像,而且尺寸也很大。
现在我们必须添加 tinyint
类型的新列 is_signature
。我们尝试了三种不同的方式
- 在内置配置中使用 Toads - 双击 table,一个新的 window 将在列选项卡下添加一个包含名称、类型和大小的新列,然后单击更改按钮。
- 在 toad 本身中使用 alter table 查询。
- 我们使用
putty
登录mysql
并执行相同的查询。
这三项努力都会导致同一个问题Fixing “Lock wait timeout exceeded; try restarting transaction” for a 'stuck" Mysql table。所以我们试图杀死等待进程并再次尝试改变table,结果还是一样。
我们再次终止进程并重新启动 mysql
服务器并再次尝试添加列,问题仍然相同。
最后我们将所有 table 数据导出到 excel sheet 并截断了 table。之后,当我们尝试添加该列时,它成功了。然后导出的 excel sheet 添加了一个新列 is_signature
,其所有值都是 0
作为新列的默认值。然后我们再次将该数据导出回 table。这就是为什么我说我没有在 normal way
.
那么有没有人遇到过这样的情况并且有比这更好的解决方案?谁能说出为什么会这样,是因为存储在 table 中的数据量大吗?
PS : table appln_doc
的 child table appln_doc_details
没有数据。只有这个 table 在更改时有问题。
归根结底,无论您使用什么工具,都归结为以下两种情况之一:
- 一个
alter table
语句 - 新建table/copydata/delete旧table/rename新建table.
第一个通常更快,第二个通常更灵活(有些东西 table 不能更改)。
无论哪种方式,处理这么多数据都需要花费大量时间,而且您对此无能为力。
好的一面是,几乎所有超时都可以在某处配置。我不知道如何配置这个特定的,但我 99% 确定你可以。找出方法并将其增加到足够大。对于 300K 条记录,我认为操作大约需要 10 分钟或更短时间,但这当然要视情况而定。将其设置为 10 小时。 :)