为什么向 MySQL 表添加列需要花费非常长的时间?

alm*_*mel 5 mysql alter-table

我使用的是 MySQL 5.6 版,并且我有一个总大小约为 110 GB 的数据库。其中一张表“输出”的大小为 49 GB。我尝试使用以下命令向输出表添加一个简单的 BOOL 列

ALTER TABLE outputs add spent BOOL;
Run Code Online (Sandbox Code Playgroud)

该查询花了 6 天零 9 小时才完成。没有添加索引,因为它是只有两个可能值的列。有谁知道为什么这个相对简单的查询会花费这么长时间?仅供参考,输出表有一个主键列和另外两个已索引的列。它共有 9 列。如果需要有关我的 mysql 配置的更多信息,我可以编辑这篇文章,但我需要知道哪些参数很重要。

Mor*_*ker 3

MySQL 5.6中添加列需要重建全表。不过,这在 MySQL 8.0 中变为在线,前提是该列位于表的末尾!MySQL 手册在14.13.1 Online DDL Operations中对此进行了介绍(在页面中搜索“添加列”):

  • 重建表?:

添加二级索引(即不是主键)应始终延迟到最后一步,以便可以对它们进行排序并以最佳方式创建。在我链接到的手册页中,任何表示In Place=No首先删除索引也有意义的操作。