[TL;DR] Verwenden Sie Daten zum Speichern von Daten, Zahlen zum Speichern von Zahlen und Zeichenfolgen zum Speichern von Zeichenfolgen.
Oracle speichert die NUMBER
Datentyp als 1 Byte pro 2 Ziffern.
Oracle speichert den CHAR
Datentyp als 1 Byte pro ASCII-Zeichen (UTF-8 und andere Codierungen benötigen möglicherweise mehr für Zeichen in erweiterten Sätzen) und füllt die Zeichenfolge rechts mit Leerzeichen auf, sodass die Zeichenfolgen alle genau dieselbe Länge haben.
Oracle speichert den VARCHAR2
Datentyp als 1 Byte pro ASCII-Zeichen plus einen kleinen Overhead (1 oder 2 Bytes) für die Stringlänge.
Oracle speichert das DATE
Datentyp als 7 Bytes
(2 für Jahr und 1 für Monat, Tag, Stunde, Minute, Sekunde).
Basierend auf Ihrer vorherigen Frage
Sie scheinen year
zu speichern und quarter
und unter der Annahme, dass Sie immer 4-stellige Jahreszahlen und 1-stellige Quartalsangaben haben werden:
NUMBER(5,0)
würde 3 Byte nehmen;CHAR(5 CHARACTER)
würde 5 Byte nehmen;VARCHAR2(5 CHARACTER)
würde 6 Bytes nehmen; undDATE
würde 7 Byte nehmen.
Also nur Berücksichtigung des Speichers a NUMBER(5,0)
wäre am effizientesten.
Allerdings
Sobald Sie anfangen, mit Jahr/Quartal, die als Zahlen/Strings gespeichert sind, zu rechnen, treten Leistungsprobleme auf:
Beispiel:Abrufen des nächsten Quartals :
- Bei
quarter
ist eineNUMBER
Datentyp, dann könnten Sie verwenden:CASE WHEN MOD(quarter,10) = 4 THEN quarter + 7 ELSE quarter + 1 END
Dies funktioniert jedoch nicht, wenn Sie 5 Viertel addieren oder Viertel subtrahieren möchten und die Logik dann viel komplizierter wird. - Bei
quarter
ist einCHAR
Datentyp, dann könnten Sie ihn in eine Zahl oder ein Datum umwandeln und eine dieser Methoden verwenden (String-Manipulation ist wahrscheinlich nicht performant). - Bei
quarter
ist einDATE
dann müssen Sie nurADD_MONTHS( quarter, 3 )
verwenden .
Das DATE
Methode ist selbstdokumentierend und existiert bereits, während NUMBER
-Methode würde nur eine benutzerdefinierte Funktion für Ihre Annäherung an ein QUARTER
werden Datentyp und sobald Sie alle Vergleichs- und Manipulationsfunktionen implementiert haben, die Sie benötigen, haben Sie das DATE
effektiv umgeschrieben Datentyp als UDT für Quartale und diese Funktionen sind weniger leistungsfähig als die optimierten Datumsfunktionen.
Verwenden Sie keine unangemessenen Datentypen - speichern Sie Daten einfach als Daten; Zahlen als Zahlen; und Zeichenfolgen als Zeichenfolge.