在给定的表中,我有多列具有“是” /“否”值的列...
Table someTable
is_shipped (ENUM) 'n','y' DEFAULT n
is_paid_for (ENUM) 'n','y' DEFAULT n
将上述字段作为BIT(2)列,将两个字段有效地组合为一个字段,是否是一个更好的主意?
Table someTable
is_shipped_paid BIT(2)
该位的每个值将决定二进制标志的值在哪里?
'0' = Not Shipped
'1' = Shipped
因此,以上列的值'01'表示该商品未发货且已付款...等...
有什么想法/评论/批评吗?
最佳答案
因此,您每行保存两个或三个字节,考虑到一个行完全需要至少26个字节的存储空间,并且要使一个表可用,您至少需要10%的可用空间,再加上20%的空间来创建一些索引可访问的行,则节省不大。
尤其是考虑到通过标准SQL查询和更新这些字段所带来的复杂性时。
还要考虑一下,这些天来,您以TB的价格购买磁盘,每GB大约需要$ 150,并且在此处保存了几个字节,因此似乎并不值得打扰。
在1980年代,当您花大价钱购买K磁盘时,这种优化很常见:大多数大型数据中心都在接下来的30年中试图解决所引起的问题。
如果您确实需要节省磁盘空间,那么不建议您启用INNO DB压缩,然后让数据库完成工作。
关于mysql - 使用BIT值将多列合并为一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26758373/