Pergunta

Estamos escrevendo uma ferramenta científica com suporte ao MySQL. O problema é que precisamos de precisão de microssegundos para nossos campos DateTime, que o MySQL não suporta atualmente. Eu vejo pelo menos duas soluções alternativas aqui:

  • Usando um tipo de coluna decimal (), com parte inteira correspondente a segundos desde algum momento (duvido que o Unix Epoch faça, pois precisamos armazenar medições realizadas nos anos 60 e 50).
  • Usando duas colunas inteiras, uma por segundos, a outra para microssegundos.

A consulta mais popular é selecionar colunas correspondentes a um intervalo de tempo (ou seja, dt_record> time1 e dt_record <time2).

Qual desses métodos (ou talvez outro) provavelmente proporcionará um melhor desempenho no caso de tabelas grandes (milhões de linhas)?

Foi útil?

Solução

Se você diz que as consultas mais populares são base de tempo, Eu recomendaria uma única coluna que armazena o tempo como na sua primeira opção.

Você pode escolher sua própria época para o aplicativo e trabalhar a partir daí.

Isso deve simplificar as consultas que precisam ser escritas ao pesquisar os intervalos de tempo.

Também dê uma olhada em 10.3.1. Os tipos de data de data, data e registro de data e hora

No entanto, os microssegundos não podem ser armazenados em uma coluna de qualquer tipo de dados temporal. Qualquer parte dos microssegundos é descartada. A conversão de valores de tempo ou datetime em forma numérica (por exemplo, adicionando +0) resulta em um valor duplo com uma parte microssegundos de 0,000000

Outras dicas

O MySQL suportará microssegundos, veja MySQL 5.6.4 Changelog:

Manuseio de segundos fracionários

Mudança incompatível: o MySQL agora permite segundos fracionários para valores de tempo, tempo e tempo de data e hora, com precisão até microssegundos (6 dígitos). Para definir uma coluna que inclua uma peça de segundos fracionários, use o tipo de sintaxe (FSP), onde o tipo Type_Name é hora, dateTime ou Timestamp, e FSP é a precisão dos segundos fracionários. Por exemplo:

Crie a Tabela T1 (tempo t (3), DT DateTime (6)); O valor do FSP, se fornecido, deve estar no intervalo de 0 a 6. Um valor de 0 significa que não há peça fracionária. Se omitido, a precisão padrão é 0. (Isso difere do padrão SQL padrão de 6, para compatibilidade com as versões MySQL anteriores.)

Os itens a seguir resumem as implicações dessa alteração. Consulte também a Seção 10.3.5, “Segundos fracionários nos valores do tempo”.

Que tal dividir as partes da data em uma peça apenas para data e microssegundos a partir da meia-noite? Existem menos de 2^64 microssegundos durante o dia. Em seguida, agrupe a tabela em {data, microssegundo}.

Eu acho que, embora não conheça seus dados, que certas consultas ficariam bem com a precisão do dia-'Experimentos em 1964' não precisa se preocupar com microssegundos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top