百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 参照 指南:MySQL&MariaDBOnlineDDL
分享文章到:

参照 指南:MySQL&MariaDBOnlineDDL

发布时间:12/01 来源:未知 浏览: 关键词:
MySQL教程栏目介绍引导MySQL&MariaDBOnlineDDL。

MySQL教程栏目介绍引导MySQL & MariaDB Online DDL。

二级索引

操纵INSTANTINPLACE重建表并发 DML只修改元数据
新建或者增加二级索引?????
删除索引?????
重命名索引 (??MySQL 5.7+,MariaDB 10.5.2+)?????
增加 FULLTEXT 索引?? ①? ①??
增加 SPATIAL 索引(??MySQL 5.7+,MariaDB 10.2.2+)?????
修改索引类型?????

注明:

  • ① 首先次增加全文索引字段时需要重建表,之后就不需要了

主键

操纵INSTANTINPLACE重建表并发 DML只修改元数据
增加主键?? ②? ②??
删除主键?????
删除一个主键同时增加一个新的?????

注明:

  • 重建聚簇索引总是需要拷贝表数据(InnoDB 是“索引组织表”),所以最佳是在新建表的时候就定义好主键
  • 要是新建表是没有指定主键,InnoDB 会选中首先个 NOT NULLUNIQUE 索引作为主键,或者运用系统生成的 KEY
  • ② 对聚簇索引来说,运用 INPLACE 模式比 COPY 模式要高效一些:不会发生 undo logredo log,二级索引是有序的,所以可以按次序加载,不需要运用变动缓冲区

普通列

操纵INSTANTINPLACE重建表并发 DML只修改元数据
列增加? ③?? ③? ③?
列删除? ④????
列重命名???? ⑤?
转变列的次序? ?????
设定默许值?????
修改数据类型?????
扩展 VARCHAR 长度(??MySQL 5.7+, MariaDB 10.2.2+)? ??? ⑥??
删除列的默许值?????
转变自增值????? ⑦
设定列为 NULL??? ⑧??
设定列为 NOT NULL?? ⑨? ⑨??
修改 ENUMSET 列的定义??? ⑩??

注明:

  • ③ 并发 DML:当插入一个自增列时,不支撑并发的 DML 操纵,增加自增列时,批量的数据会被从新组织,代价昂扬

  • ③ 重建表:增加列时,MySQL 5.7及以前版本需要重建表,MySQL 8.0 当 ALGORITHM=INPLACE 时,需要重建表,ALGORITHM=INSTANT 时不需要重建

  • ③ INSTANT算法:增加列时,运用 INSTANT 算法有下面这些限定

    • 增加列操纵不克不及和其它不支撑 INSTANT 算法的操纵合并为一条 ALTER TABLE 语句
    • 新增的列只能增加到表的最后,不克不及放到其它列的前面,在 MariaDB 10.4 之后,支撑在任意位置增加
    • 不克不及将列增加到 ROW_FORMAT=COMPRESSED 的表中
    • 不克不及将列增加到包括 FULLTEXT 的表中
    • 不克不及将列增加来临时表中,暂时表只支撑 ALGORITHM=COPY
    • 不克不及将列增加到驻留在数据字典表空间中的表中
    • 在增加列的时候不会盘算行的大小限定,该限定在施行 DML 操纵插入或者更新表时才会被检查
  • ④ 删除列时,批量的数据需要被从新组织,代价昂扬,在 MariaDB 10.4 之后,删除列支撑 INSTANT 算法

  • ⑤ 重命名列时,确保只转变列名,不转变数据类型,这样才干支撑并发的 DML 操纵

  • ⑥ 扩展 VARCHAR 长度时,INPLACE 是有前提的,必需保障用于标识字符串长度的长度字节不变(这里说的都是字节,不是 VARCHAR 的字符长度,字节占用与采纳的字符集有关,utf8 字符集下,一个字符占 3 个字节, utf8mb4 则 4 个字节)

    • 当 VARCHAR 列长度在 0-255 个字节时,长度标识占用一个字节
    • 当 VARCHAR 列长度大于 255 个字节时,长度标识占用两个字节

    因而,INPLACE 只支撑 0-255 个字节之间或者 256 个字节到更大的长度之间的变动。VARCHAR 列长度减小是不支撑 INPLACE 的。

  • ⑦ 自增列值变动是修改的内存中的值,不是数据文件

  • ⑧ ⑨ 设定列为 [NOT] NULL 时,批量的数据被从新组织,代价昂扬

  • ⑩ 修改 ENUMSET 类型的列定义时,可否需要表拷贝取决于已有元素的个数和插入成员的位置

  • ? 在 MariaDB 10.4 之后,列排序支撑 INSTANT 算法

  • ? 在 MariaDB 10.4.3 之后,InnoDB 支撑运用 INSTANT 算法添加列的长度,但是也有一些限定,具体参照 Changing the Data Type of a Column

生成列

操纵INSTANTINPLACE重建表并发 DML只修改元数据
增加 STORED?????
修改 STORED 列的排序?????
删除 STORED?????
增加 VIRTUAL?????
修改 VIRTUAL 列的排序?????
删除 VIRTUAL?????

外键

操纵INSTANTINPLACE重建表并发 DML只修改元数据
增加外键束缚?? ????
删除外键束缚?????

注明:

  • ? 增加外键时,只要当 foreign_key_checks 选项被禁用的时候才支撑 INPLACE 算法

操纵INSTANTINPLACE重建表并发 DML只修改元数据
修改 ROW_FORMAT?????
修改 KEY_BLOCK_SIZE?????
设定耐久表统计信息?????
指定字符集??? ???
转换字符集??? ???
优化表?? ????
运用 FORCE 选项重建表?? ????
施行空的重建?? ????
重命名表?????

注明:

  • ?? 当字符集不一样时,需要重建表
  • ??? 要是表中包括 FULLTEXT 的字段,则不支撑 INPLACE

表空间

操纵INSTANTINPLACE重建表并发 DML只修改元数据
重命名通例表空间?????
启用或者禁用通例表空间加密?????
启用或者禁用 file-per-table 表空间加密?????

限定

  • 在暂时表 TEMPORARY TABLE 上新建索引时会产生表拷贝
  • 要是表上有 ON...CASCADE 或者 ON...SET NULL 束缚,则 ALERT TABLE 不支撑字句 LOCK=NONE
  • 在 Onlne DDL 操纵完成以前,它必需期待相干表已经持有元数据锁的事务提交或者回滚,在这个历程中,相干表的新事务会被阻塞,没法施行
  • 当在大表上施行波及到表重建的 DDL 时,会存在下列限定
    • 没有任何机制可以暂停 Online DDL操纵或限定 Online DDL 操纵的 I/O 或CPU运用率
    • 要是操纵失败,则回滚 Online DDL操纵的代价非常昂扬
    • 长工夫运转的 Online DDL 可能会致使复制推迟。 Online DDL 操纵必需在 Master 上施行完成后才干在 Slave 上施行,在这个历程中, 并发处置的 DML 在 Slave 上面必需期待 DDL 操纵完成后才会施行。

写在最后

本文将会延续批改和更新,更多出色内容请 follow me。

更多相干免费学习举荐:mysql教程(视频)

以上就是参照 指南:MySQL & MariaDB Online DDL的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板