将相关首选项(所有 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,因此第二个偏好已关闭
等等...
最佳答案
我要问的问题是:
- 磁盘成本对您来说是一个问题吗?大多没有。所以保留多列。
- 您是否经常从不同地方运行偏好查询?那么就不要使用复杂的逻辑并保持复杂性。此外,阅读本专栏的任何人都应该知道位位置的映射。
- 如果你有一个大团队,随着时间的推移,人们会弄乱这些位
让事情变得简单。除非不可避免,否则不要使事情复杂化。
关于MySQL:将相关的 BOOL 首选项全部存储在一个整数中作为其二进制值的每一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809337/