使用位掩码存储不相关的位列

时间:2012-10-11 22:22:30

标签: sql-server database-design

我正在设计一张桌子。有几个列彼此无关。

我考虑将这些列合并到一个通用的ATTRIBUTES INT位掩码列中。

现在,我试图说服自己这是一个坏主意。这似乎是一种反模式。如果我稍后需要另一个位列,那么它可能会节省一些时间,但除此之外还有什么好处吗?

如果我在位掩码上有索引,并且我在ATTRIBUTES&amp ;; 128 = 128,然后我怀疑它效率不高。索引将按整个值排序所有内容,而不是按位排序。所以,我想它实际上只需要扫描整个索引而不是确切知道去哪里。

这听起来不错吗?这是一个可怕的想法吗?

谢谢, Tedderz

1 个答案:

答案 0 :(得分:4)

使用位掩码列使

  • 代码难以阅读和维护
  • 索引使用不可能

它也违反了正常形式的数据库设计。

您不会购买空间,因为SQL Server可以将多个位列压缩为单个字节。

然而,由于位列自然不是很有选择性,因此索引使用在这里也可能没有用。

总体而言,单位列的优势显然超过了位掩码列的优势。所以几乎在所有情况下我都会使用单位列。