Mysql5.6特性--- DDL online operate

来源:互联网 发布:二维数组怎么用 编辑:程序博客网 时间:2024/05/21 09:40

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上操作。

0 0
原创粉丝点击