运维倒计时

mysql ddl

2019-11-05  本文已影响0人  Darui30

Online DDL算法

关注点从如下5个维度

可见,日常关注点尽量是不要影响线上的DML操作,如果可以不去rebuild操作最好。

关于OnlineDDL分类

只说比较常见的场景

  1. 添加二级索引(较快,理论上只会在innodb引擎层创建二级索引,在支持dml同时,需要维护月份ddl期间数据变更日志,待变更完成后回放到新的二级索引中。但,如果表过大,ddl时间过长,其实还是会影响到dml的并发)
  2. 删除二级索引(巨快,只需要修改元数据信息)
  3. 添加列(巨慢,没办使用到inplace,只能是copy操作)
  4. 修改列名(巨快,只需要修改元数据信息)
  5. 修改列字段类型(巨慢,没办使用到inplace,只能是copy操作)
  6. 修改列字段大小(巨快,只需要修改元数据信息)
  7. 修改列注释/默认值(巨快,只需要修改元数据信息)
  8. 删除列(较慢,需要改动数据行,还需要维护DDL期间的数据变更日志)
  9. 修改列名/字段大小/字段类型/注释,加上AFTER、BEFORE(巨慢,无论之前表情怎么样)

详细信息可以看手册

8.0.12的福音(立刻加列)

"立刻加列" 之所以高效的原因是:

但是

限制

参考链接
8.0 Online DDL Operations
MySQL DDL为什么成本高?
[原理解析] MySQL 为表添加列 是怎么"立刻"完成的

上一篇 下一篇

猜你喜欢

热点阅读