2010-02-13 610 views
8

estamos escribiendo una herramienta científica con soporte MySQL. El problema es que necesitamos precisión de microsegundos para nuestros campos de fecha y hora, que MySQL no admite actualmente. Veo al menos dos soluciones aquí:Almacenamiento de microsegundos en MySQL: ¿qué solución?

  • El uso de un tipo de columna decimal(), con la parte entera correspondiente al segundo desde un cierto punto en el tiempo (dudo que UNIX época va a hacer, ya que tenemos que almacenar las mediciones tomadas en 60's y 50's).
  • Usando dos columnas enteras, una por segundos, la otra por microsegundos.

La consulta más popular es la selección de columnas correspondientes a un intervalo de tiempo (es decir dt_record> tiempo1 y dt_record < tiempo2).

¿Cuál de estos métodos (o tal vez otro) es probable que proporcione un mejor rendimiento en el caso de las tablas grandes (millones de filas)?

Respuesta

4

Si dices que las consultas más populares son la base de tiempo, te recomiendo que vayas con una sola columna que almacene el tiempo como en tu primera opción.

Puedes elegir tu propia época para la aplicación y trabajar desde allí.

Esto debería simplificar las consultas que se deben escribir cuando se buscan los intervalos de tiempo.

también echar un vistazo a 10.3.1. The DATETIME, DATE, and TIMESTAMP Types

Sin embargo, microsegundos no pueden ser almacenados en una columna de los datos temporales tipo. Cualquier parte de microsegundos es descartada. Conversión de los valores DATETIME tiempo o a forma numérica (para ejemplo, mediante la adición de +0) resulta en un valor doble con una parte microsegundos de .000000

0

¿Qué hay de dividir las partes de la fecha en un fecha- solo parte, y microsegundos desde la medianoche? Hay menos de 2^64 microsegundos en el día. A continuación, agrupe la tabla el {date, microsecond}.

Supongo, aunque no conozco sus datos, que ciertas consultas estarían bien con la precisión a nivel de día: 'experimentos en 1964' no necesitan preocuparse por microsegundos.

+0

Las consultas típicas requerirán una precisión de nivel de minutos para empezar, lo que significa que la consulta necesitará usar dos columnas en su cláusula where, que, por lo que yo entiendo, afectará notablemente el rendimiento. – dpq

5

MySQL apoyará microsegundos, ver MySQL 5.6.4 changelog:

fracciones de segundo Manejo

Cambio incompatible: MySQL permite ahora fracciones de segundo por el tiempo, fecha y hora, y los valores de fecha y hora, con un máximo de microsegundos (6 dígitos) precisión. Para definir una columna que incluya una parte de segundos fraccionarios, use la sintaxis type_name (fsp), donde type_name es TIME, DATETIME o TIMESTAMP, y fsp es la precisión de segundos fraccionarios. Por ejemplo:

CREAR TABLA t1 (t TIEMPO (3), dt DATETIME (6)); El valor de fsp, si se proporciona, debe estar en el rango de 0 a 6.Un valor de 0 significa que no hay parte fraccionaria. Si se omite, la precisión predeterminada es 0. (Esto difiere del valor predeterminado de SQL estándar de 6, para compatibilidad con versiones anteriores de MySQL ).

Los siguientes elementos resumen las implicaciones de este cambio. Consulte también la Sección 10.3.5, "Segundos fraccionarios en valores de tiempo".

Cuestiones relacionadas