Si solo tiene algunas variables Consideraría mantener columnas boolean
separadas.
- La indexación es fácil. En particular, también indexes on expressions y partial indexes.
- Las condiciones para las consultas son fáciles de escribir y leer, y tienen sentido.
- Una columna booleana ocupa 1 byte (sin relleno de alineación). Por solo algunas variables, esto ocupa el menor espacio.
- A diferencia de otras opciones
boolean
columnas permiten NULL
valores para bits individuales si lo necesita. Siempre puede definir las columnas NOT NULL
si no lo hace.
Si usted tiene más de una mano las variables completos pero no más de 32, una columna integer
puede servir mejor. (O un bigint
para hasta 64 variables.)
- ocupa 4 bytes en el disco (puede requerir relleno de alineación, dependiendo de las columnas anteriores).
- Indización muy rápida para coincidencias exactas (operador
=
).
- El manejo de valores individuales puede ser más lento/menos conveniente que con
varbit
o boolean
.
Con más variables, o si desea manipular los valores mucho, o si no tiene tablas enormes o espacio de disco/RAM no es un problema, o si no está seguro de qué elegir , Consideraría bit(n)
or bit varying(n)
(short: varbit(n)
.
Por tan sólo 3 bits de de información, individuo boolean
columnas llegar a funcionar con 3 bytes, un integer
Necesidades 4 bytes (tal vez relleno alineación adicional) y un bit string
6 bytes (5 + 1).
Para 32 bits de de información, un integer
todavía necesita 4 bytes (+ relleno), un bit string
ocupa 9 bytes para el mismo (5 + 4) y boolean
columnas ocupan 32 bytes.
Para optimizar espacio en disco Además, debe comprender los mecanismos de almacenamiento de PostgreSQL, especialmente la alineación de datos. More in this related answer.
This answer sobre cómo transformar el tiposboolean, bit (n) y número entero pueden ser de ayuda, también.
Muchas gracias por la explicación, ¡eso es exactamente lo que necesitaba! Creo que iré con una columna de 'enteros'. –