有一个约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快照)