12

就性能或灵活性而言,使用 int vs varbinary 存储位掩码是否有任何优势。

出于我的目的,我将始终对这些位掩码进行读取(不写入或更新)。

4

4 回答 4

18

您绝对应该使用INT(如果您需要 32 个标志)或BIGINT(对于 64 个标志)。如果您需要更多可以使用的标志BINARY(但您可能还应该问自己为什么在应用程序中需要这么多标志)。

此外,如果使用整数类型,则可以直接使用标准的位运算符,而无需将字节数组转换为整数类型。

如果您确实需要更多标志并且必须使用BINARY,那么您将失去对位运算符的本机支持,因此很容易支持检查标志值。我可能会将检查标志值转移到客户端应用程序,但如果您习惯使用 T-SQL 编程,这也是一个选项。如果您使用 C#,则您有一个BitArray具有必要操作的类,而在 Java 中您有一个BitSet类。

于 2009-04-30T22:30:50.420 回答
6

通常认为使用一堆位列而不是位掩码更可取。它们将在页面中打包在一起,因此它们不会占用更多空间。虽然我似乎也总是使用 int 或 bigint 列来避免输入所有列名。但使用智能感知我可能会使用位列。

于 2009-04-30T22:34:06.667 回答
2

好吧,考虑到 int 的存储空间较小,并且通常使用起来更容易一些,我不确定您为什么要使用 varbinary。

于 2009-04-30T22:22:09.223 回答
1

我通常同意@hainstech 使用位字段的回答,因为您可以明确命名每个位字段以指示它应该存储的内容。但是,我还没有看到与位字段进行位掩码比较的实用方法。使用 SQL Server 的按位运算符(&、| 等),很容易找出是否设置了一系列标志。使用等式运算符针对大量位字段进行更多工作。

于 2009-04-30T22:49:00.377 回答