使用int vs varbinary在性能或灵活性方面存储位掩码是否有任何优势。

出于我的目的,我将一直在读取这些位掩码(没有写入或更新)。

有帮助吗?

解决方案

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

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

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

其他提示

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

好吧,考虑到int的存储空间较少,通常更容易使用,我不知道你为什么要使用varbinary。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top