BITMAP索引存储100个数据对象的指标属性

时间:2011-12-09 18:46:16

标签: sql-server sql-server-2005 sql-server-2008

有人可以向我们指出有关(或使用)BITMAP用法的信息,以存储数据对象的100个类似指示符(开/关)属性。

例如,如果STATE表中的“California”记录具有120个类似指示符的属性,并且这些属性唯一标识加利福尼亚,那么将这些指示符存储在VARCHAR(2)字段中是明智的(假设为64位系统)?

我们使用120个属性来解析加利福尼亚州的代理键。我们的Db是SQL Server。我们还在讨论添加120个一个字符或一个位字段或一个VARCHAR(120)字段。

非常感谢所有人的帮助!

1 个答案:

答案 0 :(得分:1)

VARCHAR(2)存储2个字符,而不是“64位平台上的128位”,正如您所期望的那样。此外,内部表示是为了保证磁盘格式可跨架构移植。 IE浏览器。 64位系统以与x86系统相同的方式表示VARCHAR(2)

如果要存储位图,即二进制数据,则使用BINARY类型。您可以用BINARY(16)类型表示120个属性。这样的存储非常密集且节省空间,但是很难搜索和索引。虽然SQL Server支持bitwise operators,但搜索这样的位图字段,例如检索所有包含位7,位12和位18的记录只能通过端到端的数据大小来完成,表扫描。

此外,请考虑在表中声明120 BIT列,而不是使用BINARY(16)字段来存储120个单位属性。它们需要2位用于存储(一位用于数据,1位用于无效),但是您的代码将更加清晰和可读,因为它实际操作命名列而不是神秘的按位操作。此解决方案的可用性与BINARY(16)相同(即没有搜索,只有表扫描)。

您还应该阅读sparse columnsfiltered indexes,这两个概念很可能适用于您的设计。