这将是一个相当大的表,因为它存储用户通过Web界面创建的对象.所以我想我将不得不使用(部分)这个列的索引.
boolean
列.
>索引很容易特别是indexes on expressions和partial indexes.
>查询条件易于编写和阅读,有意义.
>一个布尔列占用1个字节(无对齐填充).只有几个变量占用最少的空间.
>与其他选项不同,如果您需要,布尔列允许单个位的NULL值.如果没有,您可以随时定义列NOT NULL.
如果您手中的全部变量不超过32个,则integer
列可能最有效. (或多达64个变量的bigint)
>在磁盘上占用4个字节(可能需要对齐填充,取决于前面的列).
>精确匹配的非常快的索引(=运算符).
>处理单个值可能比使用varbit或boolean更慢/更便利.
有更多的变量,或者如果你想操作的值很多,或者如果没有巨大的表或磁盘空间/ RAM不是一个问题,或者如果你不确定选择什么,我会考虑bit(n)
or bit varying(n)
(short: varbit(n)
.
>占用至少5个字节(或8个用于非常长的字符串)加1个字节,每组8位(向上舍入).
>您可以直接使用bit string functions and operators和some standard SQL functions as well.
对于只有3位信息,单个布尔列获得3个字节,一个整数需要4个字节(可能是额外的对齐填充)和一个位字符串6个字节(5 1).
对于32位信息,一个整数仍然需要4个字节(填充),一个位串占用9个字节(5 4),而布尔列占用32个字节.
要进一步优化磁盘空间,您需要了解Postgresql的存储机制,特别是数据对齐. More in this related answer.
This answer如何转换布尔型,位(n)和整数也可能有帮助.