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

Memorizza i dati data-ora come numeri

Sarebbe molto meglio se le date fossero memorizzate come date. Memorizzarli come numeri anziché come stringhe introduce un diverso insieme di problemi.

Se sei assolutamente bloccato con le date memorizzate come stringhe, per consentire l'utilizzo degli indici sulle colonne, dovresti convertire le date che stai utilizzando come parametri come stringhe nel formato appropriato e quindi fare affidamento sul fatto che l'ordinamento delle stringhe in quel particolare formato corrisponde all'ordinamento previsto delle date effettive. Se confronti mai la stringa con una data o con un numero, otterrai una conversione implicita del tipo di dati che, nel migliore dei casi, porterà a problemi di prestazioni perché gli indici non possono essere utilizzati e nel peggiore dei casi genererà risultati errati o errori.

Supponendo che si eviti la conversione del tipo di dati, è probabile che i problemi di prestazioni derivino dal fatto che l'ottimizzatore ha molte difficoltà a stimare la cardinalità quando si utilizza il tipo di dati sbagliato. Oracle sa, ad esempio, che ci sono 365 giorni (o 8760 ore o 525600 minuti) tra il 1/1/2012 e il 1/1/2013. D'altra parte, ci sono miliardi di possibili stringhe tra '20120101000000' e '20130101000000'. Ciò può far sì che l'ottimizzatore non utilizzi un indice quando lo desideri (o viceversa), utilizzi il tipo sbagliato di join, ecc.