Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Datum-Uhrzeit-Daten als Zahlen speichern

Es wäre viel besser, wenn die Daten als Daten gespeichert würden. Sie als Zahlen statt als Zeichenketten zu speichern, führt zu anderen Problemen.

Wenn Sie absolut fest mit Datumsangaben sind, die als Zeichenfolgen gespeichert sind, müssen Sie die Datumsangaben, die Sie als Parameter verwenden, als Zeichenfolgen in das entsprechende Format konvertieren und sich dann darauf verlassen, dass Indizes für die Spalten verwendet werden können Die Sortierung von Zeichenfolgen in diesem bestimmten Format stimmt mit der erwarteten Sortierreihenfolge der tatsächlichen Daten überein. Wenn Sie jemals die Zeichenfolge mit dem Datum oder mit einer Zahl vergleichen, erhalten Sie eine implizite Datentypkonvertierung, die bestenfalls zu Leistungsproblemen führt, da Indizes nicht verwendet werden können, und schlimmstenfalls zu falschen Ergebnissen oder Fehlern führt.

Angenommen, Sie vermeiden die Datentypkonvertierung, ergeben sich die Leistungsprobleme wahrscheinlich aus der Tatsache, dass der Optimierer große Schwierigkeiten hat, die Kardinalität zu schätzen, wenn Sie den falschen Datentyp verwenden. Oracle weiß zum Beispiel, dass zwischen dem 1.1.2012 und dem 1.1.2013 365 Tage (oder 8760 Stunden oder 525600 Minuten) liegen. Andererseits gibt es Milliarden möglicher Zeichenfolgen zwischen „20120101000000“ und „20130101000000“. Das kann dazu führen, dass der Optimierer einen Index nicht verwendet, wenn Sie es möchten (oder umgekehrt), die falsche Art von Join verwendet usw.