0

我正在从我的(MySQL/innodb)表中删除 4 列,

简单的代码,

ALTER TABLE database_name.table_name
DROP COLUMN A,
DROP COLUMN B,
DROP COLUMN C,
DROP COLUMN D;

它已经运行了近20个小时。这是一个 30GB / 8560000 行的大表,对于我所拥有的经验而言,这是一台旧台式计算机上的本地实例。

当我在管理面板上检查服务器状态时,它告诉我服务器已“停止”。但是,在查询窗口底部的操作/响应窗口中,该行显示“正在运行..”,并且图标是您期望的旋转/思考动画。

大约 4 KB/s 的流量,但没有读取或写入,InnoBuffer 使用率为 99.9%,应该在 30GB 左右,CPU 介于 1.5 和 2 之间。

我可以打开另一个服务器实例,这表明它正在运行,但架构中仍然列出了旧列。(我已经避免通过该实例查询数据库)

我只是想知道到底发生了什么?这是“正常的”吗?我应该耐心等待吗?

4

1 回答 1

1

在我发现的大型(对于我的机器)MySQL 数据库上删除多列的最佳方法是创建一个新表,省略我试图删除的列。

在挂断/断开与我的数据库的连接之前,alter table 命令需要几天时间。使用如下代码,我能够在两个多小时内实现我所​​需要的。

CREATE TABLE new_table_name AS
    SELECT column_E,column_F,column_G
    FROM old_table_name;

更详细的说明,包括如何管理索引和其他注意事项,可以在这里找到

于 2019-10-16T20:30:02.403 回答