【发布时间】:2011-12-17 06:32:08
【问题描述】:
我需要在 1 个表中存储 5 个布尔值。 每个值都可以存储为 tinyint(4)。所以,有 5 个 tinyint(4)。 我正在考虑将 5 个布尔值放入一个 tinyint(4) 中。 相信大家都比我更清楚,1个字节可以保存5个比特是没有问题的:) 第一个值可以存储为 0(false) 或 1(true),第二个存储为 0(false) 或 2(true),第三个存储为 0 或 4,第四个存储为 0 或 8,第五个存储为 0 或 16。 因此,如果我们将这些值的总和存储在 tinyint(4) 中,我们确切地知道 5 个布尔值。
For example, stored 21 -> 16 + 4+1.
So, if 21 is stored, we know that:
Fifth=true
Fourth=false
Third=true
Second=false
First=true.
我的问题是: 只保留 1 个变量有意义吗?我们赢得了 db 卷(字节)和性能(少了 4 列,但这只是 4 字节,而您实际上在同一个表中使用了 varchar(1000)),但每次我们必须从“sum”中“提取”一个适当的布尔值" 使用 php 函数,这种情况经常发生(比如当用户按下按钮时)。 将布尔值作为总和存储在 1 列中是否有意义,所以您有 7 列而不是 11 列?
很明显,这些值不是键。
谢谢。
【问题讨论】:
标签: mysql performance boolean tinyint