Memorizzazione di microsecondi in MySQL: quale soluzione?
-
20-09-2019 - |
Domanda
stiamo scrivendo uno strumento scientifico con il supporto MySQL. Il problema è, abbiamo bisogno di precisione microsecondo per i nostri campi datetime, che MySQL attualmente non supporta. Vedo almeno due soluzioni qui:
- Uso di un tipo di colonna decimale (), con la parte intero corrispondente al secondi poiché certo punto nel tempo (dubito che UNIX epoca farà, dal momento che dobbiamo memorizzare misurazioni effettuate in 60 e '50).
- Utilizzando due colonne interi, uno per i secondi, l'altra per microsecondi.
La query più popolare è selezionare colonne corrispondenti ad un intervallo di tempo (cioè dt_record> tempo1 e dt_record Quale di questi metodi (o forse un altro) rischia di fornire una migliore performance nel caso di tabelle di grandi dimensioni (milioni di righe)?
Soluzione
Se si dice che le query più popolari sono la base dei tempi, mi sento di raccomandare di andare con una sola colonna che memorizza il tempo come nella vostra prima opzione .
Si potrebbe scegliere il proprio epoca per l'applicazione, e lavorare da lì.
Questo dovrebbe semplificare le query che deve essere scritto durante la ricerca per gli intervalli di tempo.
Anche dare un'occhiata al 10.3.1. I tipi DATETIME, la data e TIMESTAMP
Tuttavia, microsecondi non possono essere memorizzati in una colonna di tutti i dati temporali genere. Qualsiasi parte microsecondi è scartato. La conversione di tempo o valori DateTime forma numerica (per esempio, aggiungendo +0) comporta una valore doppio con una parte microsecondi di 0,000 mila
Altri suggerimenti
MySQL sosterrà microsecondi, vedi MySQL 5.6 .4 changelog :
frazioni di secondo la manipolazione
Incompatibile Cambio: MySQL permette ora di frazioni di secondo per il tempo, DATETIME, TIMESTAMP e valori, con un massimo di microsecondi (6 cifre) precisione. Per definire una colonna che include una parte frazionaria secondi, utilizzare la sintassi di TYPE_NAME (FSP), dove nome_tipo è il tempo, DATETIME, o TIMESTAMP, e FSP è il frazionaria precisione secondi. Ad esempio:
CREATE TABLE t1 (t TIME (3), dt DATETIME (6)); Il valore fsp, se dato, deve essere nel campo da 0 a 6. Il valore 0 indica che non c'è parte frazionaria. Se omesso, la precisione di default è 0. (Questo differisce dal default SQL standard 6, per la compatibilità con precedenti MySQL versioni.)
I seguenti elementi riassumono le implicazioni di questo cambiamento. Vedere anche la sezione 10.3.5, “frazioni di secondo a valori di tempo”.
Che ne dite di dividere le parti della data in una parte di data-only, e microsecondi dalla mezzanotte? Ci sono meno di 2 ^ 64 microsecondi nel corso della giornata. Poi raggruppare la tabella a {date, microsecondo}.
direi, anche se non so i vostri dati, che alcune query sarebbe bene con una precisione a livello di giorno - 'esperimenti nel 1964' non ha bisogno di preoccuparsi di microsecondi.