在给定的表中,我有多个带有"is"/“否”值的列......
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 为单位的磁盘的价格约为每 150 美元,并且在这里和那里保存一些字节似乎并不值得打扰。
在 20 世纪 80 年代,当您花巨资购买 K 磁盘时,这种优化很常见:大多数大型数据中心在接下来的 30 年里都在尝试解决所造成的问题。
如果您确实需要节省磁盘空间,请认真考虑启用 INNO DB 压缩并让数据库来完成这项工作。
关于mysql - 使用 BIT 值将多列合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26758373/