sql >> Base de Datos >  >> RDS >> Oracle

¿Alguna desventaja de las banderas de bits en las columnas de la base de datos?

Si solo tiene un puñado de roles, ni siquiera guarda ningún almacenamiento espacio en PostgreSQL . Un integer columna usa 4 bytes, un bigint 8 bytes Ambos pueden requerir relleno de alineación:

  • Dar sentido a los tamaños de fila de Postgres
  • Calcular y ahorrar espacio en PostgreSQL

Un boolean la columna usa 1 byte. Efectivamente, puede ajustar cuatro o más columnas booleanas para un integer columna, ocho o más para un bigint .

También tenga en cuenta que NULL los valores solo usan un bit (simplificado) en el mapa de bits NULL.

Las columnas individuales son más fáciles de leer e indexar . Otros ya han comentado sobre eso.

Todavía podría utilizar índices en expresiones o índices parciales para evitar problemas con índices ("no sargable"). Declaraciones generalizadas como:

la base de datos no puede usar índices en una consulta como esta

o

¡Estas condiciones no son SARGable!

son no del todo ciertas - tal vez para algunos otros RDBMS que carecen de estas características.
Pero, ¿por qué eludir cuando puede evitar el problema por completo?

Como has aclarado, estamos hablando de 6 tipos distintos (quizás más). Ir con boolean individual columnas Probablemente incluso ahorre espacio en comparación con un bigint . El requisito de espacio parece irrelevante en este caso.

Si estas banderas eran mutuamente excluyentes , podrías usar uno columna de tipo enum o una pequeña tabla de consulta y una clave foránea que hace referencia a ella. (Se descartó en la actualización de la pregunta).