51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

mysql为大表增加字段

# mysql为大表增加字段 {#mysql为大表增加字段}

本文讲述如何为mysql的一张大表快速地增加字段。默认情况下,若对mysql的一张数据量很大的表新增字段时, 会巨慢无比, 执行一个新增字段的语句可能要执行七八个小时,甚至更久,这简直无法接受。那么本文就来总结下为mysql的大表快速增加字段的若干方法。

# 1. 使用mysql自带的优化方法 {#_1-使用mysql自带的优化方法}

只需在原有的sql语句基础上补充个参数(用来指定具体算法)即可,不同的mysql版本支持不同的算法,详情可以访问mysql大型表的DDL操作 (opens new window)

# 5.7版本 {#_5-7版本}

如下是在一个真实的线上环境的执行过程。 为了提高执行效率,我已经把数据库写操作的程序暂时停掉了。

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.22-log |
+------------+
1 row in set (0.03 sec)

mysql> select count(1) from news;
+----------+
| count(1) |
+----------+
|   863780 |
+----------+
1 row in set (0.22 sec)

mysql> alter table news add column (
    ->     site_type int(1) default 1 comment '站点类型, 对应site表的type字段',
    ->     img_count int default 0 comment '图片数量',
    ->     nsfw float default 0 comment '鉴黄值: 数值0-1之间,值越大,色情度越高'
    ->     ), ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (11 min 0.59 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select count(1) from news_img;
+----------+
| count(1) |
+----------+
|  4476600 |
+----------+
1 row in set (0.87 sec)

mysql> alter table news_img add column (
    ->     site_type int(1) default 1 comment '站点类型, 对应site表的type字段',
    ->     width int default 0 comment '宽',
    ->     height int default 0 comment '高'
    ->     ), ALGORITHM=INPLACE, LOCK=NONE;

Query OK, 0 rows affected (8 min 24.88 sec)
Records: 0  Duplicates: 0  Warnings: 0

可以看出,对1张86万条数据的表的修改耗时约11分钟,对1张447万条数据的表的修改耗时约8分钟。

赞(4)
未经允许不得转载:工具盒子 » mysql为大表增加字段