在给定的表格中,我有多个列,其中包含“是”/“否”值....
Table someTable
is_shipped (ENUM) 'n','y' DEFAULT n
is_paid_for (ENUM) 'n','y' DEFAULT n
将上述字段作为BIT(2)coloumn并将两个字段有效地合并为一个字段会更好吗?
Table someTable
is_shipped_paid BIT(2)
这个位的每个值都决定了二进制标志的值?
'0' = Not Shipped
'1' = Shipped
因此,上述列的'01'值表示该物品未装运且已付款......等等......
任何想法/评论/评论?
答案 0 :(得分:1)
所以你连续保存了两三个字节,考虑到一行需要至少26个字节的存储空间,并且要使一个表可用,你需要至少10%的可用空间,再加上另外20%的空闲空间索引使行可访问,然后保存不重要。
特别是当你考虑通过标准SQL查询和更新这些字段时增加的复杂性。
还要考虑一下,这些天你以每TB 150美元的价格购买磁盘,并在这里保存了几个字节,这似乎不值得打扰。
在20世纪80年代,当您以高成本购买磁盘时,这种优化很常见:大多数大型数据中心在接下来的30年里都在努力解决所造成的问题。
如果你真的需要节省磁盘空间,那么就要考虑启用INNO数据库压缩并让数据库完成工作。