Hay dos formas de almacenar tipos enum en la base de datos: como una cadena o como un entero.¿Vale la pena convertir las enumeraciones de cadena de la base de datos en enteros?
Guardando la enumeración (sex = {male,female}
, account_type = {regular,pro,admin}
, etc.) como cadenas hace que las cosas sean más legibles pero requiere más espacio que enteros.
Por otro lado, los enteros requieren mapear las enumeraciones dentro y fuera de la base de datos. Como beneficio, la distinción entre mayúsculas y minúsculas se maneja fuera de la base de datos con enteros.
¿Asumiendo que ambos están indexados, la conversión entera generalmente vale la pena? ¿Cuánto más rápido es la búsqueda con números enteros?
Ejemplo
Tal vez un ejemplo concreto podría ayudar a visualizar las cosas. Permite tomar el tipo de cuenta anterior con una base de datos de 100,000 usuarios.
cadena enum
Suponiendo 8 bits de longitud fija tipo CHAR
7*100000*8/8 = 700000 bytes
Entero enum
Suponiendo 8 bits enteros TINYINT
100000*8/8 = 400000 bytes
Parece que el tamaño es casi la mitad con enteros enteros. También necesita concider los índices.