[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; yDATEtomarí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
quarteres unNUMBERtipo de datos, entonces podría usar:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 ENDpero 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
quarteres unCHARtipo 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
quarteres unaDATEentonces 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.