Mysql online DDL特性(二)

基础材料:

centos7.5  mysql 5.7.24


online DDL操作说明列表:

类型 操作 是否Inplace 是否重建表 是否允许并发DML 是否只修改元数据 备注
index 创建或添加二级索引

仅在完成访问表的所有事务完成后才结束

索引的初始状态反映了表的最新内容

  删除索引

 

  重命名索引  
  添加FULLTEXT索引 是* 否*

FULLTEXT如果没有用户定义的FTS_DOC_ID

则添加第一个索引会重建表

FULLTEXT可以添加其他索引而无需重建表

  添加SPATIAL索引 是* 否*

SPATIAL如果没有用户定义的FTS_DOC_ID

则添加第一个索引会重建表

SPATIAL可以添加其他索引而无需重建表

  更改索引类型  
primary key 添加主键 对表进行重建,耗费IO
  删除主键

ALGORITHM=COPY支持删除主键而不在同一ALTER TABLE语句中添加新主键

对表进行重建,耗费IO

产生临时表时同样需要在原表路径生成表空间临时文件

  同时删除主键并添加

对表进行重建,耗费IO

COLUMN 添加列 是*

添加自增列时不允许并发DML,且mysql会自动设置LOCK=SHARED,用来替换默认的LOCK=DEFAULT

对表进行重建,耗费IO

  删除列 对表进行重建,耗费IO
  重命名列  
  重新排序列 对表进行重建,耗费IO
  设置/删除列默认值 仅修改表元数据。默认列值存储在 表的.frm文件中,而不是InnoDB 数据字典中。
  更改列数据类型

ALGORITHM=COPY支持更改列数据类型

对表进行重建,耗费IO

  扩展VARCHAR列大小

VARCHAR列大小从0增加到255个字节,可以使用inplace方式。

如果改为大于255的值,则只能使用ALGORITHM=COPY

  更改自动增量值 否* 修改存储在内存中的值,而不是数据文件。
  添加列NULL/NOT NULL 对表进行重建,耗费IO
  修改ENUMSET列的定义  

GENERATED

COLUMN

添加STORED ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED), ALGORITHM=COPY;
  修改STORED列顺序 ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST, ALGORITHM=COPY;
  删除STORED ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
  添加VIRTUAL ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL), ALGORITHM=INPLACE, LOCK=NONE;
  修改VIRTUAL列顺序 ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST, ALGORITHM=COPY;
  删除VIRTUAL ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
foreign key 添加外键约束  
  删除外键约束  
table 修改ROW_FORMAT 对表进行重建,耗费IO
  修改KEY_BLOCK_SIZE 对表进行重建,耗费IO
  设置持久表统计信息 仅修改表元数据。
  指定字符集 如果新字符编码不同,则重建表。
  转换字符集 如果新字符编码不同,则重建表。
  OPTIMIZE优化表 是*

OPTIMIZE TABLE tbl_name;

具有FULLTEXT索引的表不支持inplace 

  执行空重建表 是*

ALTER TABLE tbl_name ENGINE=InnoDB;

具有FULLTEXT索引的表不支持inplace 

  重命名表 重命名与表对应的文件而不进行复制
tablespace 启用或禁用单表文件表空间加密 ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;
PARTITION PARTITION BY 不涉及 不涉及 ALGORITHM=COPY, LOCK={DEFAULT|SHARED|EXCLUSIVE}
  ADD PARTITION 不涉及 不涉及

只允许ALGORITHM=DEFAULT,LOCK=DEFAULT

在保持共享锁的同时复制数据

  DROP PARTITION 不涉及 不涉及 只允许ALGORITHM=DEFAULT,LOCK=DEFAULT
  DISCARD PARTITION 不涉及 不涉及 只允许ALGORITHM=DEFAULT,LOCK=DEFAULT
  IMPORT PARTITION 不涉及 不涉及 只允许ALGORITHM=DEFAULT,LOCK=DEFAULT
  TRUNCATE PARTITION  不涉及 不涉及 不复制现有数据。只删除行; 不会改变表本身或其任何分区的定义
  COALESCE PARTITION 不涉及 不涉及

只允许ALGORITHM=DEFAULT, LOCK=DEFAULT

在保持共享锁的同时复制数据

  REORGANIZE PARTITION 不涉及 不涉及

只允许ALGORITHM=DEFAULT, LOCK=DEFAULT

保持共享元数据锁的同时从受影响的分区复制数据

  EXCHANGE PARTITION 不涉及 不涉及  
  ANALYZE PARTITION 不涉及 不涉及  
  CHECK PARTITION 不涉及 不涉及  
  OPTIMIZE PARTITION 不涉及 不涉及 ALGORITHMLOCK参数被忽略。重建整个表
  REBUILD PARTITION 不涉及 不涉及

只允许ALGORITHM=DEFAULT, LOCK=DEFAULT

保持共享元数据锁的同时从受影响的分区复制数据。

  REPAIR PARTITION 不涉及 不涉及  
  REMOVE PARTITION 不涉及 不涉及 ALGORITHM=COPY, LOCK={DEFAULT|SHARED|EXCLUSIVE}

 

你可能感兴趣的:(Mysql)