点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
问 题
在日常运维MySQL时,ddl执行的最多的大概就是扩展varchar字段长度的情况,但是面对一定数据量的表,在执行时间上有时很快,有时执行起来很慢,这是什么原因?
测 试
通过MySQL官方文档得知,这跟varchar的字段所占用的字节数有关。
当占用字节数为0-255字节时(注意是字节,不是字符),需要用一个字节记录字段的长度; 当占用256及以上的字节时,需要用两个字节记录字段的长度; 添加字段长度时,如果添加前后长度都在0-255范围内,或者大于等于256范围内,可以通过inplace的算法进行online ddl,如果是从0-255范围跨到大于等于256 ,就不支持online ddl,只能通过copy的算法进行ddl,所以执行较慢。MySQL会自动根据是否支持online ddl自动处理,所以才会出现扩展varchar字段长度执行有时很快,有时很慢的情况。
在创建表时,如果字段的字节长度不会超过256字节,那么建议varchar的字节长度创建时小于256字节; 如果字符串的长度超过200字节,那么varchar的字节长度建议超过256字节。
本文作者:吴 昊(上海新炬中北团队)
本文来源:“IT那活儿”公众号
文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。