mysql - 使用 BIT 值将多列合并为一列

标签 mysql enums

在给定的表中,我有多个带有"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/

相关文章:

java - 如何扩展实现接口(interface)的枚举的静态方法?

c# - 如何在 C# 中创建类似 String Literal Union 类型的 TypeScript

python - 使用 if 条件比较使用 python 的密码

mysql - SQL 在每个 SELECT 请求中获取 ROW_NUMBER 和 COUNT

php - 准备使用php脚本来比较mysql表

c++ - 在派生类中覆盖/重新实现枚举

mysql - 检查新用户名是否不在两个单独的表中

mysql - MySQL查询多列索引表

enums - 我应该使用枚举还是盒装特征对象来模拟多态性?

Java - 删除 "Variable",保留有副作用的分配