sql >> Databasteknik >  >> RDS >> Oracle

Lagra datum-tid-data som siffror

Det skulle vara mycket bättre om datumen lagrades som datum. Att lagra dem som siffror snarare än strängar introducerar en annan uppsättning problem.

Om du absolut har fastnat för datum lagrade som strängar, för att tillåta index på kolumnerna att användas, måste du konvertera de datum du använder som parametrar som strängar i lämpligt format och sedan lita på det faktum att sortering av strängar i det specifika formatet matchar den förväntade sorteringsordningen för faktiska datum. Om du någonsin jämför strängen till datum eller med ett nummer, kommer du att få implicit datatypkonvertering som i bästa fall kommer att leda till prestandaproblem eftersom index inte kan användas och i värsta fall genererar felaktiga resultat eller fel.

Förutsatt att du undviker datatypkonvertering kommer prestandaproblemen troligen att uppstå från det faktum att optimeraren har stora svårigheter att uppskatta kardinalitet när du använder fel datatyp. Oracle vet till exempel att det är 365 dagar (eller 8760 timmar eller 525600 minuter) mellan 1/1/2012 och 1/1/2013. Å andra sidan finns det miljarder möjliga strängar mellan '20120101000000' och '20130101000000'. Det kan göra att optimeraren inte använder ett index när du vill att det ska göra det (eller vice versa), använder fel sorts koppling osv.



  1. MySQL Galera-noden startar inte (avbryter med felet 'WSREP:[...]:60:kunde inte nå primärvy:60 (operationen tog timeout)')

  2. SQL-syntaxfel vid laddning av databasfil (möjligt versionsfel?)

  3. MYSQL Left Gå med i sista resultatraden

  4. kolumndatum kan inte kastas automatiskt till typ tidsstämpel med tidszon django/postgres