Pregunta

que estamos escribiendo una herramienta científica con el soporte de MySQL. El problema es que necesitamos la precisión de microsegundos para nuestros campos de fecha y hora, que MySQL no soporta actualmente. Veo al menos dos soluciones aquí:

  • Uso de un tipo de columna decimal (), con parte entero correspondiente al segundo desde un cierto punto en el tiempo (I dudar de que UNIX época va a hacer, ya que tenemos que almacenar las mediciones tomadas en 60 y de los años 50).
  • El uso de dos columnas de números enteros, uno para segundos, el otro para 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

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

¿Fue útil?

Solución

Si usted dice que las consultas más populares son la base de tiempo, Yo recomendaría ir con una sola columna que almacena el tiempo como en su primera opción .

Se puede escoger su propia época para la aplicación, y trabajar desde allí.

Esto debería simplificar las consultas que se deben escribir en la búsqueda de los intervalos de tiempo.

También echar un vistazo a 10.3.1. Los tipos DATETIME, DATE y TIMESTAMP

  

Sin embargo, microsegundos no se pueden almacenar   en una columna de cualquier dato temporal   tipo. Cualquier parte microsegundos es   descartado. Conversión de tiempo o   valores de fecha y hora a forma numérica (por   ejemplo, mediante la adición de +0) resulta en una   valor doble con una parte microsegundos   de 0,000000

Otros consejos

MySQL apoyará microsegundos, consulte MySQL 5.6 0,4 de cambios :

  

fracciones de segundo manipulación

     

Cambio incompatible: MySQL permite ahora fracciones de segundo por el tiempo,   Fecha y hora, y TIMESTAMP valores, con hasta microsegundos (6 dígitos)   precisión. Para definir una columna que incluye una parte de segundo fraccionada,   utilizar el type_name sintaxis (fsp), donde type_name es el tiempo, DATETIME, o   TIMESTAMP, y FSP es la precisión de fracciones de segundo. Por ejemplo:

     

CREATE TABLE t1 (t TIME (3), dt DATETIME (6)); El valor FSP, si se da,   debe estar en el rango de 0 a 6. Un valor de 0 significa que no hay   parte fraccional. Si se omite, la precisión predeterminada es 0. (esto es distinto   desde el valor predeterminado de SQL estándar de 6, para la compatibilidad con las anteriores   MySQL versiones.)

     

Los siguientes elementos se resumen las implicaciones de este cambio. Ver   también la Sección 10.3.5, “fracciones de segundo en los valores de tiempo”.

¿Qué hay de dividir las partes de la fecha en una parte de la fecha solamente, y microsegundos desde la medianoche? Hay menos de 2 ^ 64 microsegundos en el día. Entonces agruparse en la tabla {fecha, microsegundos}.

Me imagino, aunque no sé sus datos, que ciertas consultas estarían bien con precisión a nivel de día - 'experimentos en 1964' no tiene que preocuparse de microsegundos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top