前言:解决问题的方法没有最优,只有更优!
最近在XXX处看到建表时,看到貌似有大佬对varchar长度设计并没有理解很透彻,故总结下。
举例: varchar(32) 和 varchar(64)区别是啥?
首先,varchar 大家都知道是动态长度分配,他们空间开销是一样的。
区别和联系:
对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,也就是上面所说空间开销一样。
但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。就是使用字符类型中定义的长度,即定义的64或32个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)操作会产生比较大的不利影响。
再者,MySQL对于该字段建索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(64)建立的索引存储大小要比varchar(32)建立索引存储大小大的多,加载索引使用的内存也更多,效率会低。