gpt4 book ai didi

mysql - ALTER 超过 1000 万条记录的特定表

转载 作者:行者123 更新时间:2023-11-30 21:57:41 25 4
gpt4 key购买 nike

我有一个名为History 的表,其中客户端有超过1000 万 条记录。

现在我想用新的额外列ALTER这个表,但是这要花太多时间,有时甚至服务器崩溃。

有没有更快的方法ALTER 大表?

我的查询是:

ALTER TABLE History ADD COLUMN oldID BIGINT(20) UNSIGNED NULL, ADD INDEX oldid16 (oldID);

我正在使用 InnoDB

最佳答案

在 MySQL Workbench 数据库编辑器中有 3 个选项,不言自明:

  • DBMS 连接保持时间间隔(以秒为单位):600
  • DBMS 连接读取超时(以秒为单位):600
  • DBMS 连接超时(以秒为单位):60

如果你想在 MySQL Workbench 中完成你的任务,那么你必须给这些选项更高的值。

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

更多的,在MySQL服务器中你可以通过改变一些服务器系统变量来实现:

  • connect_timeout(对您的任务最重要)
  • long_query_time
  • 等待超时
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout

和/或其他人,我不再认识他们了。

祝你好运!

编辑 1:

还有 innodb 特定变量作为更改的候选者,以完成您的任务。像这样,例如:

  • innodb_buffer_pool_size

当然,所有更改和组合都取决于您的系统资源/配置/工作流程。

编辑 2:

PS:对于如此大的操作,我们使用了 SQLyog ,一个非常稳定和强大的数据库编辑器。最重要的是:我们从未像 MySQL Workbench 那样崩溃。并且所有数据库工作流程/过程都很顺利。

编辑 3:

新建议:

  • 在再次运行查询之前准备日志记录过程,以便跟踪出现的错误或成功消息。
  • 另外,我看到了查询。我建议您应用 oldid16插入新列后单独索引。
  • 一个重要的,关于数据库表:他们每个人都应该有一个在文件系统中单独分配文件。参见 InnoDBFile-Per-Table Tablespaces .而且,也许,Overview of Partitioning in MySQL

P.S:就我个人而言,我看不到以其他方式运行 ALTER 查询的另一种选择,而不是您最初的问题所提出的:作为一个整体并且立即 - 之后,也许,分离index 部分也是。

关于mysql - ALTER 超过 1000 万条记录的特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com