Mysql5.6特性--- DDL online operate

mysql 版本:5.6.21


mysql> show create table t_tag;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                              |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_tag | CREATE TABLE `t_tag` (
  `tag_name` varchar(40) DEFAULT NULL,
  `tag_desc` varchar(40) DEFAULT NULL,
  `c` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> alter table t_tag add index hlb(tag_name);
Query OK, 0 rows affected (12.77 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table t_tag add index hlb1(tag_desc),ALGORITHM=copy;
Query OK, 1097726 rows affected (49.93 sec)
Records: 1097726  Duplicates: 0  Warnings: 0

从上面看,tag_name 、tag_desc 两个字段类型一样,但是两者的消耗的时间却又很大的差别,

第一种方法叫 inplace ,就地更改,不影响行数据 (Query OK, 0 rows affected (12.77 sec))

第二种方法需要创建一个临时表,表中所有记录行受影响 (Query OK, 1097726 rows affected (49.93 sec))


同时当你对一个大表进行ddl 操作时,可以通过以下方法判断ddl 操作的一个大致情况

1、克隆原表的表结构

2、用原表的一小部分数据填充克隆表

3、在克隆表上执行ddl 操作

4、检查rows affected是0还是非0.如果是非0,意味着该DDL操作将要重建表中所有行数据,也就意味着你须要安排计划一个业务低峰值的时间或者在slave上操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangliang0703

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值