我有很多用于表中实体的布尔属性,并且需要存储更多。目前我有17个这样的属性(其他字段是四个bigint
字段)。我需要添加大约十几个属性。
我应该继续为每个必需的属性创建布尔列还是有更好的方法?这将如何影响存储?
这些字段将以多种组合进行搜索(因此多列索引无济于事)。
关于节省存储的想法(过早):我如何使用 64 位整数并将每个位用作布尔值?我可以使用位运算符进行匹配,但是由于扫描不是基于整数的排序或相等性,因此此类操作会使用索引吗?
我有很多用于表中实体的布尔属性,并且需要存储更多。目前我有17个这样的属性(其他字段是四个bigint
字段)。我需要添加大约十几个属性。
我应该继续为每个必需的属性创建布尔列还是有更好的方法?这将如何影响存储?
这些字段将以多种组合进行搜索(因此多列索引无济于事)。
关于节省存储的想法(过早):我如何使用 64 位整数并将每个位用作布尔值?我可以使用位运算符进行匹配,但是由于扫描不是基于整数的排序或相等性,因此此类操作会使用索引吗?
我不会打扰。
bigint
需要 8 个字节的存储空间,而布尔值需要 17 个字节。bigint
字段需要另外 32 个字节的存储空间。因此,预计仅节省 10% 左右——如果你有更多的非布尔列,则更少,但当你添加更多的布尔列时只会稍微多一点——代价是使你的代码和数据更难以理解。
但是如果你有很多数据(数亿条记录),我会做一些性能测试来比较。