sql >> Database teknologi >  >> RDS >> Oracle

Gem dato-tidsdata som tal

Det ville være meget bedre, hvis datoerne blev gemt som datoer. At gemme dem som tal i stedet for strenge introducerer et andet sæt problemer.

Hvis du er helt fastlåst med datoer gemt som strenge, for at tillade indekser på kolonnerne at blive brugt, skal du konvertere de datoer, du bruger som parametre som strenge i det passende format og derefter stole på, at sortering af strenge i det pågældende format matcher den forventede sorteringsrækkefølge af faktiske datoer. Hvis du nogensinde sammenligner strengen til dato eller med et tal, vil du få implicit datatypekonvertering, som i bedste fald vil føre til ydeevneproblemer, fordi indekser ikke kan bruges og i værste fald vil generere forkerte resultater eller fejl.

Forudsat at du undgår datatypekonvertering, vil ydeevneproblemerne sandsynligvis opstå som følge af, at optimeringsværktøjet har meget svært ved at estimere kardinalitet, når du bruger den forkerte datatype. Oracle ved for eksempel, at der er 365 dage (eller 8760 timer eller 525600 minutter) mellem 1/1/2012 og 1/1/2013. På den anden side er der milliarder af mulige strenge mellem '20120101000000' og '20130101000000'. Det kan få optimeringsværktøjet til ikke at bruge et indeks, når du ønsker det (eller omvendt), til at bruge den forkerte slags join osv.



  1. Hvilken type er denne streng? a:1:{s:2:da;}

  2. Fejl i Spring Data JPA:Spring Data returnerer List<BigInteger> i stedet for List<Long>

  3. PG fuldtekstsøgning på skinner ved hjælp af pg_search gem for understreng

  4. Sådan kontrolleres, om SQL-databasen er beskadiget - Løsning til reparation af MDF-fil