改变表添加领域永远

有一个约200万行的桌子,

改变表xxx添加yyy smallint默认0

目前状态是将数据复制到tmp表。 该表使用innodb,有几个指标。 tmp_table_size = 4G和max_heap_table_size = 4g,为什么要这么长时间? 如何加快速度?

在Jeremy Zawodny和Peter Ziestev所着的“高性能MySQL”第二版中,无论表的大小如何,都有一种高速,高风险的向列表添加列的方法。 它是这样的:

方法1

假设db是xxx所在的数据库

第1步。CREATE TABLE zzz LIKE xxx;

第2步。ALTER TABLE zzz add yyy smallint default NULL; – 现在不使用0

步骤3.在OS中执行以下操作

服务mysql停止
cd / var / lib / mysql / db
mv xxx.frm xxxold.frm
cp zzz.frm xxx.frm
服务mysql启动

第4步。尝试看看xxx是否可访问

如果这不起作用,请尝试以下操作:

方法2

第1步。CREATE TABLE zzz LIKE xxx;

步骤2. ALTER TABLE zzz add yyy smallint默认0;

第3步。插入到zzz(col1,col2,… colN)SELECT col1,col2,… colN FROM xxx;

第4步。ALTER TABLE xxx RENAME jjj;

第5步。ALTER TABLE zzz RENAME xxx;

第二种方法必须工作。 第一个是从我提到的那本书推荐的。

给他们一个尝试!

PS在尝试第一种方法之前,备份一切(LVM快照)