mysql 字段 MySQL online ddl扩展字段长度

一问 题从.5开始支持 ddl,5.6版本更加完善,一直到.0版本,支持了更多alter table语句通过 ddl快速的执行

问 题

从.5开始支持 ddl,5.6版本更加完善,一直到.0版本,支持了更多alter table语句通过 ddl快速的执行,在执行效率、降低锁表时间以及IO消耗上有了很大的提升。

在日常运维MySQL时,ddl执行的最多的大概就是扩展字段长度的情况,但是面对一定数据量的表,在执行时间上有时很快,有时执行起来很慢,这是什么原因?

测 试

2.1 创建表t1

字符集为。

插入一些测试数据:

2.2 执行ddl命令

首先,name字段长度由30扩展至50。

mysql 字段 MySQL online ddl扩展字段长度

再把name字段长度由50扩展至90。

可以看到两次ddl的执行时间差异很大, 造成差异的原因是什么呢?

通过MySQL官方文档得知,这跟的字段所占用的字节数有关。

通过上面的例子分析,(30) 占用了30个字符,字符集为每个字符4个字节,共占用120个字节,(50) 占用了200个字节,而(90)占用了360个字节,(30)到(50)不涉及跨字节范围,而从(50)到(90)则涉及到跨字节范围,所以后者不能通过 ddl执行语句,只能通过原始的方式去copy表执行,速度较慢。

2.3 验证结论

通过显示指定的方式,更加明显的看出,当涉及到跨字节范围时,MySQL会报错提示使用copy的方式执行alter table语句。通过使用copy的方式跨话字节范围后,再次指定 的方式,又可以进行 ddl了。

测试结论:

依据本例,(30)为占用120字节,如果确定不会超过256字节,可以根据实际需求创建小于等于(63);如果预估数据可能会超过256字节,就不要创建低于(64)的,这样方便以后字段扩展进行使用 ddl。

当然,不建议为了方便 ddl操作,将所有的字段长度都超过256字节,因为MySQL在加载内存临时表的时候,会将字段定义的所有的长度加载到内存中,而不是实际的长度,同样又会造成资源消耗。

现在最火的发帖平台

上海一手房楼盘2023 上海宝山【海上瑧悦】2023最新价格优惠、潜力、地段、政策分析!宝山海上瑧悦

2023-9-28 12:02:26

现在最火的发帖平台

创业从摆地摊开始 创业新手其实可以从摆地摊开始

2023-9-28 12:02:46

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索