MySQL:将相关的 BOOL 首选项全部存储在一个整数中作为其二进制值的每一位

标签 mysql algorithm

将相关首选项(所有 bool 值)保存在整数中,就好像每个首选项都是该首选项对应的二进制值的一位,这对我的性能/存储空间有利吗?如果是这样,那么显着吗?

我的网站上有一堆彼此相关的 bool 类型的用户偏好,所以我认为将它们全部分组到一个 int 中可能是有益的,就好像每个偏好都是数字的一点,例如所以:

如果我有 5 个偏好,每个偏好的值都是 2 的幂,从 2^0 到 2^4。如果首选项为 true,我会将该值添加到数据库的 int 列中,如果不是,我不会添加任何内容

第一优先值:1 第二优先值:2 第三优先值:4 第四优先值:8 第五偏好值:16

如果只激活第一、第三和第四个偏好,我的总和将为 13 (1+4+8),我可以通过检查来检查每个偏好是否存在

(total_sum % 2^(i)) >= 2^(i-1)

其中 i 代表第 i 个偏好。

例如:

13 % 2^(1) >= 2^(1-1) -> 13%2 >= 1 -> True,所以第一优先处于启用状态

13 % 2^(2) >= 2^(2-1) -> 13%4 >= 2 -> False,因此第二个偏好已关闭

等等...

最佳答案

我要问的问题是:

  1. 磁盘成本对您来说是一个问题吗?大多没有。所以保留多列。
  2. 您是否经常从不同地方运行偏好查询?那么就不要使用复杂的逻辑并保持复杂性。此外,阅读本专栏的任何人都应该知道位位置的映射。
  3. 如果你有一个大团队,随着时间的推移,人们会弄乱这些位

让事情变得简单。除非不可避免,否则不要使事情复杂化。

关于MySQL:将相关的 BOOL 首选项全部存储在一个整数中作为其二进制值的每一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809337/

相关文章:

mysql - 如何使用 MySQL DECIMAL?

mysql - 根据 MySQL 中的 ID 列表检索行

java - 将两个给定数组配对并赢得大部分比较的最佳策略

javascript - 计算数组每个时间帧的平均值最大值

python - django 中的时间戳字段

php - 在 PHP MYSQL 中更新

arrays - 算法将数组拆分为子数组,其中所有子数组之间的最大总和尽可能低

algorithm - 用于检查与原始文件的接近度的 Anagram 算法

php - Mysql 查询最近的条目

java - 卡尔曼动态约束Delaunay三角剖分算法的实现