sql >> Database >  >> RDS >> Oracle

Datum-tijdgegevens opslaan als getallen

Het zou veel beter zijn als de datums als datums werden opgeslagen. Als u ze als getallen opslaat in plaats van als tekenreeksen, introduceert u een andere reeks problemen.

Als u absoluut vastzit aan datums die zijn opgeslagen als strings, om indexen op de kolommen te kunnen gebruiken, moet u de datums die u als parameters gebruikt, converteren als strings in het juiste formaat en dan vertrouwen op het feit dat het sorteren van tekenreeksen in dat specifieke formaat komt overeen met de verwachte sorteervolgorde van werkelijke datums. Als je ooit de tekenreeks vergelijkt met de datum of met een getal, krijg je impliciete conversie van gegevenstypes die in het beste geval tot prestatieproblemen zullen leiden omdat indexen niet kunnen worden gebruikt en in het slechtste geval onjuiste resultaten of fouten zullen genereren.

Ervan uitgaande dat u conversie van gegevenstypes vermijdt, zullen de prestatieproblemen waarschijnlijk voortkomen uit het feit dat de optimizer veel moeite heeft om de kardinaliteit in te schatten wanneer u het verkeerde gegevenstype gebruikt. Oracle weet bijvoorbeeld dat er 365 dagen (of 8760 uur of 525600 minuten) zijn tussen 1/1/2012 en 1/1/2013. Aan de andere kant zijn er miljarden mogelijke strings tussen '20120101000000' en '20130101000000'. Dat kan ertoe leiden dat de optimizer een index niet gebruikt wanneer u dat zou willen (of vice versa), de verkeerde soort join gebruikt, enz.



  1. Een enorm XML-bestand importeren naar MySQL

  2. Meerdere rijen in een enkele rij en combineer kolom SQL

  3. Hoe percentage te berekenen met een SQL-statement

  4. Postgres ratio_to_report functie