mysql修改字段长度是否锁表

Varchar对于小于等于255字节以内的长度可以使用一个byte 存储。大于255个字节的长度则需要使用2个byte存储
1, 如果是255长度之内的扩展,或者255之外的扩展,则不锁表,采用in-place方式执行
2, 如果从varchar长度从(0,255) 到 255+, 则会锁表,采用copy方式执行;
3, 如果字段的缩小会锁表,采用copy方式执行;
4,    (1) 当字段字符集为utf8时,字符个数对应的变更区间范围为1-85,86+两个区间;
    (2) 当字段字符集为utf8mb4时,字符个数对应的变更区间范围为1-63,64+两个区间;
5, 扩充的字段是否是二级索引
    长度在对应范围内,会建立全宽索引;超出长度的则会转化为前缀索引;(innodb_large_prefix OFF, 长度<=767)
    分为如下几种情况
    a, 当类型为utf8,innodb_large_prefix值为ON时,变更区间在86-1024区间中,字段宽度扩大变更会很快完成,但是在1025+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前1024位
    b, 当类型为utf8,innodb_large_prefix值为OFF时,变更区间在86-255区间中,字段宽度扩大变更会很快完成,但是在256+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前256位
    c, 当类型为utf8mb4时,innodb_large_prefix值为ON时,变更区间在64-768区间中,字段宽度扩大变更会很快完成,但是在769+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前768位
    d, 当类型为utf8mb4时,innodb_large_prefix值为OFF时,变更区间在64-191区间中,字段宽度扩大变更会很快完成,但是在192+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前768位
注,以上讨论的是使用mysql原生支持的DDL情况,如果使用PT则不会进行锁表;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值