SQL Server: varbinary o int para almacenar una máscara de bits?

¿Hay alguna ventaja de usar int vs varbinary para almacenar máscaras de bits en términos de performance o flexibilidad?

Para mis propósitos, siempre haré lecturas en estas máscaras de bits (sin escrituras ni actualizaciones).

Definitivamente debe usar una INT (si necesita 32 banderas) o BIGINT (para 64 banderas). Si necesita más banderas, puede usar BINARY (pero probablemente también debería preguntarse por qué necesita tantas banderas en su aplicación).

Además, si usa un tipo integral, puede usar operadores bit a bit estándar directamente sin convertir una matriz de bytes a un tipo integral.

Si necesita más banderas y tiene que usar BINARY , pierde la compatibilidad nativa con los operadores de bit a bit y, por lo tanto, es fácil de usar para verificar los valores de los indicadores. Probablemente movería la búsqueda de valores de bandera a una aplicación cliente, pero si te sientes cómodo progtwigndo en T-SQL también es una opción. Si está utilizando C # tiene una class BitArray con las operaciones necesarias y en Java tiene una class BitSet .

En general, se considera preferible utilizar un grupo de columnas de bits en lugar de una máscara de bits. Se agruparán en la página para que no ocupen más espacio. Aunque yo también siempre parezco ir con una columna int o bigint para evitar el tipado de todos los nombres de columnas … pero con intellisense probablemente iría con las columnas de bits.

Bueno, considerando que una int tiene less espacio de almacenamiento y generalmente es un poco más fácil trabajar con ella, no estoy seguro de por qué usaría un varbinary.

Normalmente estoy de acuerdo con la respuesta de @ hainstech de usar campos de bit, porque puedes nombrar explícitamente cada campo de bit para indicar qué debe almacenar. Sin embargo, no he visto un enfoque práctico para hacer comparaciones de máscaras de bits con campos de bits. Con los operadores bit a bit de SQL Server (&, |, etc …) es fácil averiguar si se establece un range de indicadores. Mucho más trabajo para hacer eso con operadores de igualdad contra una gran cantidad de campos de bits.

    Intereting Posts