[TL;DR] Usa le date per memorizzare le date, i numeri per memorizzare i numeri e le stringhe per archiviare le stringhe.
Oracle memorizza il NUMBER
tipo di dati come 1 byte per 2 cifre.
Oracle memorizza il CHAR
tipo di dati come 1 byte per carattere ASCII (UTF-8 e altre codifiche potrebbero richiedere più caratteri in set estesi) e riempirà la stringa con il tasto destro del mouse con spazi in modo che le stringhe abbiano tutte esattamente la stessa lunghezza.
Oracle memorizza il VARCHAR2
tipo di dati come 1 byte per carattere ASCII più un piccolo sovraccarico (1 o 2 byte) per la lunghezza della stringa.
Oracle memorizza il DATE
tipo di dati come 7 byte
(2 per anno e 1 per mese, giorno, ora, minuto, secondo).
Sulla base della la tua domanda precedente
sembra che tu stia memorizzando year
e quarter
e supponendo di avere sempre anni a 4 cifre e trimestri a 1 cifra, allora:
NUMBER(5,0)
richiederebbe 3 byte;CHAR(5 CHARACTER)
richiederebbe 5 byte;VARCHAR2(5 CHARACTER)
richiederebbe 6 byte; eDATE
richiederebbe 7 byte.
Quindi considerando solo la memoria un NUMBER(5,0)
sarebbe il più efficiente.
Comunque
Non appena inizi a fare aritmetica su anno/trimestri memorizzati come numeri/stringhe, allora entri in problemi di prestazioni:
Ad esempio, ottenere il trimestre successivo :
- Se
quarter
è unNUMBER
tipo di dati quindi potresti usare:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 END
ma questo non funziona quando vuoi aggiungere 5 quarti o iniziare a sottrarre quarti e quindi la logica inizia a diventare molto più complicata. - Se
quarter
è unCHAR
tipo di dati, quindi puoi convertirlo in un numero o in una data e utilizzare uno di questi metodi (è improbabile che la manipolazione delle stringhe sia efficace). - Se
quarter
è unaDATE
quindi devi solo usareADD_MONTHS( quarter, 3 )
.
Il DATE
il metodo è autodocumentante ed esiste già mentre il NUMBER
il metodo diventerebbe semplicemente una funzione personalizzata per l'approssimazione di un QUARTER
tipo di dati e una volta implementate tutte le funzioni di confronto e manipolazione di cui hai bisogno avrai effettivamente riscritto il DATE
tipo di dati come UDT per i trimestri e tali funzioni saranno meno performanti rispetto alle funzioni di data ottimizzate.
Non utilizzare tipi di dati inappropriati:archivia semplicemente le date come date; numeri come numeri; e stringhe come stringa.