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)?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top