修改表添加字段需要很长时间

修改表添加字段需要很长时间

有一张约 200 万行的表,

修改表 xxx 添加 yyy smallint 默认 0
花费了很长时间,其当前状态是将数据复制到 tmp 表。该表使用 innodb,有几个索引。tmp_table_size=4G 且 max_heap_table_size = 4g,为什么要花这么长时间?如何加快速度?

答案1

在 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.在操作系统中执行以下操作

服务 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 default 0;

步骤3. INSERT INTO zzz (col1,col2,...colN) SELECT col1,col2,...colN FROM xxx;

步骤4.ALTER TABLE xxx RENAME jjj;

步骤5. ALTER TABLE zzz RENAME xxx;

第二种方法一定有效。第一种方法是我提到的那本书推荐的。

尝试一下吧!!!

PS 在尝试第一种方法之前,请备份所有内容(LVM 快照)

相关内容