Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更改超过1000万条记录的特定表格_Mysql - Fatal编程技术网

Mysql 更改超过1000万条记录的特定表格

Mysql 更改超过1000万条记录的特定表格,mysql,Mysql,我有一个名为History的表,其中客户机有1000多万条记录 现在我想用新的额外列更改这个表,但这需要花费太多时间,有时甚至会导致服务器崩溃 有没有更快的方法可以修改大型表 我的问题是: ALTER TABLEHistoryADD列oldIDBIGINT(20)无符号NULL, 添加索引oldid16(oldID) 我正在使用MySQL Workbench db editor中的InnoDB有3个选项,不言自明: DBMS连接保持活动间隔(秒):600 DBMS连接读取超时(秒):600 D

我有一个名为
History
的表,其中客户机有1000多万条记录

现在我想用
新的额外列
更改
这个表,但这需要花费太多时间,有时甚至会导致服务器崩溃

有没有更快的方法可以
修改大型表

我的问题是:

ALTER TABLE
History
ADD列
oldID
BIGINT(20)无符号NULL, 添加索引
oldid16
oldID


我正在使用MySQL Workbench db editor中的InnoDB

有3个选项,不言自明:

  • DBMS连接保持活动间隔(秒):600
  • DBMS连接读取超时(秒):600
  • DBMS连接超时(秒):60
如果您想在MySQL Workbench中完成任务,那么必须为这些选项赋予更高的值

同样的原则应该适用于所有编辑,包括Liquibase

更重要的是,在MySQL服务器中,您可以通过更改一些服务器系统变量来实现这一点:

  • 连接超时(对您的任务最重要)
  • 查询时间长
  • 等待超时
  • 交互超时
  • 网络读取超时
  • 网络写入超时
和/或其他人,我不再认识他们了

祝你好运

编辑1: 为了完成您的任务,还有一些innodb特定的变量可供更改。比如说:

  • innodb\u缓冲区\u池\u大小
当然,所有更改和组合都取决于您的系统资源/配置/工作流

编辑2: PS:对于我们使用的这种非常大的操作,一个非常稳定和强大的db编辑器。最重要的是:我们从来没有像MySQL Workbench那样崩溃过。所有db工作流程/流程都很顺利

编辑3: 新建议:

  • 在再次运行查询之前,请准备日志记录过程,以便跟踪出现的错误或成功消息
  • 还有,我看到了这个问题。我建议您使用
    oldid16
    插入新列后,单独索引
  • 关于db表的一个重要问题是:每个表都应该有一个 在文件系统中单独分配文件。看见也许

附言:就我个人而言,我看不到另外一个运行
ALTER
查询的选项,除了您最初的问题:作为一个整体并立即-在分离
索引
部分之后。

在MySQL Workbench db editor中有3个选项,不言自明:

  • DBMS连接保持活动间隔(秒):600
  • DBMS连接读取超时(秒):600
  • DBMS连接超时(秒):60
如果您想在MySQL Workbench中完成任务,那么必须为这些选项赋予更高的值

同样的原则应该适用于所有编辑,包括Liquibase

更重要的是,在MySQL服务器中,您可以通过更改一些服务器系统变量来实现这一点:

  • 连接超时(对您的任务最重要)
  • 查询时间长
  • 等待超时
  • 交互超时
  • 网络读取超时
  • 网络写入超时
和/或其他人,我不再认识他们了

祝你好运

编辑1: 为了完成您的任务,还有一些innodb特定的变量可供更改。比如说:

  • innodb\u缓冲区\u池\u大小
当然,所有更改和组合都取决于您的系统资源/配置/工作流

编辑2: PS:对于我们使用的这种非常大的操作,一个非常稳定和强大的db编辑器。最重要的是:我们从来没有像MySQL Workbench那样崩溃过。所有db工作流程/流程都很顺利

编辑3: 新建议:

  • 在再次运行查询之前,请准备日志记录过程,以便跟踪出现的错误或成功消息
  • 还有,我看到了这个问题。我建议您使用
    oldid16
    插入新列后,单独索引
  • 关于db表的一个重要问题是:每个表都应该有一个 在文件系统中单独分配文件。看见也许

附言:就我个人而言,我看不到另外一种运行
ALTER
查询的方法,除了您最初的问题:作为一个整体,并且在一次-可能之后,也分离
索引
部分。

您是否使用phpmyadmin来更改表?尝试使用客户端程序,如。我们使用的是liquibase迁移脚本。查询本身似乎很好。我想问题与程序本身有关。您是否使用phpmyadmin来更改表?尝试使用客户端程序,如。我们使用的是liquibase迁移脚本。查询本身似乎很好。我想这个问题与程序本身有关。实际上,对于本地客户,我们不能提供在SQLYG或workbench上运行查询的选项。我们必须从cmd运行。比如迁移脚本。我想我会试试你的选择。@RonakPatel是的,你是对的,因为客户应该使用“本地”编辑器。我不知道你的项目进展如何。但是cmd是一个编辑器,例如与其他编辑器一样是一个接口。因此,可以应用运行
ALTER
query的相同条件。更改服务器变量的想法是您关于服务器崩溃的声明的效果。为了提出新的建议,我现在将使用“编辑3”进行编辑。@RonakPatel我刚刚想起一件事:它所花费的时间应该来自应用索引部分,而不是添加列。但是索引是必要的。@RonakPatel当然是必要的。但是,在应用仅用于创建列的
ALTER
查询之后,您可以运行第二个
ALTER
查询来应用索引。实际上是用于内部定制