我有这个带有三列的大型表,例如:
+-----+-----+----------+ | 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?
ALTER TABLE table_name DROP COLUMN associd;
ALTER TABLE table_name SET UNUSED associd;
ALTER TABLE table_name DROP UNUSED COLUMNS CHECKPOINT 250;
是否有删除此列的替代方法-可能仅用两列创建一个新表,或者用检查点删除该表?
您要做的任何事情都需要读取和写入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;
但是,通常更快的方法是在加载一堆数据之前先删除表上的所有索引,然后再重新创建索引。