一尘不染

从大表中删除列

sql

我有这个带有三列的大型表,例如:

+-----+-----+----------+
| id1 | id2 | associd  |
+-----+-----+----------+
|   1 |  38 | 73157604 |
|   1 | 112 | 73157605 |
|   1 | 113 | 73157606 |
|   1 | 198 | 31936810 |
|   1 | 391 | 73157607 |
+-----+-----+----------+

这持续了3800万行。问题是我想删除“ associd”列,但运行ALTER TABLE table_name DROP COLUMN associd;时间太长。我想要做这样的事情:ALTER TABLE table_name SET UNUSED associd;ALTER TABLE table_name DROP UNUSED COLUMNS CHECKPOINT 250;那么这显然加速了过程,但它是不可能在MySQL?

是否有删除此列的替代方法-可能仅用两列创建一个新表,或者用检查点删除该表?


阅读 145

收藏
2021-03-17

共1个答案

一尘不染

您要做的任何事情都需要读取和写入3,800万行,因此任何事情都不会很快实现。最快的方法可能是将数据放入新表中:

create table newTable as
    select id1, id2
    from oldTable;

或者,如果要确保保留类型和索引,请执行以下操作:

create table newTable like oldTable;

alter table newTable drop column assocId;

insert into newTable(id1, id2)
    select id1, id2
    from oldTable;

但是,通常更快的方法是在加载一堆数据之前先删除表上的所有索引,然后再重新创建索引。

2021-03-17