Pregunta

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

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

¿Fue útil?

Solución

Definitivamente debe usar un INT (si necesita 32 banderas) o BIGINT (para 64 banderas). Si necesita más indicadores, puede usar BINARY (pero probablemente también debería preguntarse por qué necesita tantos indicadores 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 indicadores y tiene que usar BINARY , pierde el soporte nativo para los operadores bit a bit y, por lo tanto, el soporte fácil para verificar los valores del indicador. Probablemente movería la búsqueda de valores de marca a una aplicación cliente, pero si se siente cómodo programando en T-SQL, esa también es una opción. Si está usando C #, tiene un BitArray con las operaciones necesarias y en Java tiene una BitSet clase.

Otros consejos

Generalmente se considera preferible usar un montón de columnas de bits en lugar de una máscara de bits. Se agruparán en la página, por lo que no ocuparán más espacio. Aunque también parece que siempre voy con una columna int o bigint para evitar todo el tipeo del nombre de la columna ... pero con intellisense probablemente iría con las columnas de bits.

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

Por lo general, estoy de acuerdo con la respuesta de @ hainstech de usar campos de bits, porque puede nombrar explícitamente cada campo de bits para indicar qué debe almacenar. Sin embargo, no he visto un enfoque práctico para hacer comparaciones de máscara de bits con campos de bits. Con los operadores bit a bit de SQL Server (& amp ;, |, etc ...) es fácil averiguar si se establece un rango de banderas. Mucho más trabajo para hacer eso con operadores de igualdad en una gran cantidad de campos de bits.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top