我应该将数据库字段大小舍入到基数为2的最接近的倍数吗?

h.c*_*tes 9 mysql sql database performance

我在一些示例数据库中看到,人们喜欢将字段大小舍入为基数2的倍数(例如varchar(32)或varchar(64)),就像它给予它们更好的性能或空间利用率一样.这种做法有什么好处吗?或者这只是人们迂腐?

谢谢你的期待

Gor*_*off 14

在MySQL中,长度应该总是255或65,535(除非有特定类型的原因选择不同的长度).存储字符串有两种不同的方法.对于长度不超过255,长度存储在一个字节而不是两个字节中,从而节省了一个存储字节.

在a中varchar,长度是最大长度.值根据实际长度存储在页面上.因此,最大长度不会影响其他任何内容的存储,但长度为1或2字节(取决于最大值是<= 255还是> = 256).(长度为2的幂 - 除256之外 - 对存储没有影响.)

至于设定长度为2的幂.我在很多场合都对此感到内疚.这是一种习惯,希望保持字段在字节边界上对齐.我们的想法是保持字段在4或8字节边界上对齐,因为这对CPU来说更为理想(想想"C"编程语言).当整数或浮点值需要4或8字节对齐(因此会丢失一些字节)或将字节从未对齐空间复制到对齐空间时,这可以防止不必要的空间.当然,正如我刚才所说,这个逻辑没有数据库的基础,因为最大长度不影响页面上的实际存储.

这没有意义的另一个原因是该varchar类型实际上比长度存储了一个或两个字节.数据库负责从页面上的物理格式到内存中的物理格式的转换.试图"优化"这个过程比努力更省力.