使用BIT值将多个列组合成一个列

时间:2014-11-05 13:25:37

标签: mysql enums

在给定的表格中,我有多个列,其中包含“是”/“否”值....

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'值表示该物品未装运且已付款......等等......

任何想法/评论/评论?

1 个答案:

答案 0 :(得分:1)

所以你连续保存了两三个字节,考虑到一行需要至少26个字节的存储空间,并且要使一个表可用,你需要至少10%的可用空间,再加上另外20%的空闲空间索引使行可访问,然后保存不重要。

特别是当你考虑通过标准SQL查询和更新这些字段时增加的复杂性。

还要考虑一下,这些天你以每TB 150美元的价格购买磁盘,并在这里保存了几个字节,这似乎不值得打扰。

在20世纪80年代,当您以高成本购买磁盘时,这种优化很常见:大多数大型数据中心在接下来的30年里都在努力解决所造成的问题。

如果你真的需要节省磁盘空间,那么就要考虑启用INNO数据库压缩并让数据库完成工作。