[TL;RD] Use fechas para almacenar fechas, números para almacenar números y cadenas para almacenar cadenas.
Oracle almacena el NUMBER
tipo de datos como 1 byte por 2 dígitos.
Oracle almacena el CHAR
tipo de datos como 1 byte por carácter ASCII (UTF-8 y otras codificaciones pueden tomar más caracteres en conjuntos extendidos) y rellenará la cadena con caracteres de espacio para que todas las cadenas tengan exactamente la misma longitud.
Oracle almacena el VARCHAR2
tipo de datos como 1 byte por carácter ASCII más una pequeña sobrecarga (1 o 2 bytes) para la longitud de la cadena.
Oracle almacena el DATE
tipo de datos como 7 bytes
(2 por año y 1 por mes, día, hora, minuto, segundo).
Basado en su pregunta anterior
parece que estás almacenando year
y quarter
y suponiendo que siempre tendrá años de 4 dígitos y trimestres de 1 dígito, entonces:
NUMBER(5,0)
tomaría 3 bytes;CHAR(5 CHARACTER)
tomaría 5 bytes;VARCHAR2(5 CHARACTER)
tomaría 6 bytes; yDATE
tomaría 7 bytes.
Entonces, solo considerando la memoria como NUMBER(5,0)
sería el más eficiente.
Sin embargo
Tan pronto como comience a hacer aritmética en el año/trimestre almacenado como números/cadenas, tendrá problemas de rendimiento:
Por ejemplo, obtener el próximo trimestre:
- Si
quarter
es unNUMBER
tipo de datos, entonces podría usar:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 END
pero esto no funciona cuando quieres sumar 5 cuartos o comenzar a restar cuartos y luego la lógica comienza a volverse mucho más complicada. - Si
quarter
es unCHAR
tipo de datos, entonces podría convertirlo en un número o una fecha y usar cualquiera de esos métodos (es probable que la manipulación de cadenas no funcione). - Si
quarter
es unaDATE
entonces solo necesita usarADD_MONTHS( quarter, 3 )
.
La DATE
El método se autodocumenta y ya existe, mientras que el NUMBER
el método simplemente se convertiría en una función personalizada para su aproximación de un QUARTER
tipo de datos y una vez que implemente todas las funciones de comparación y manipulación que necesita, habrá reescrito efectivamente el DATE
tipo de datos como UDT para trimestres y esas funciones tendrán menos rendimiento que las funciones de fecha optimizadas.
No use tipos de datos inapropiados, solo almacene fechas como fechas; números como números; y cadenas como cadena.