在MySQL中存储微秒:哪种解决方法?

时间:2010-02-13 11:37:58

标签: mysql performance datetime time-precision

我们正在编写一个支持MySQL的科学工具。问题是,我们的日期时间字段需要微秒精度,MySQL目前不支持。我在这里看到至少两个解决方法:

  • 使用decimal()列类型,其中整数部分对应于某个时间点的秒数(我怀疑UNIX纪元会这样做,因为我们必须存储60年代和50年代的测量结果。)
  • 使用两个整数列,一个用于秒,另一个用于微秒。

最受欢迎的查询是选择与时间间隔相对应的列(即dt_record> time1和dt_record< time2)。

在大型表(数百万行)的情况下,这些方法中的哪一种(或者可能是另一种方法)可能提供更好的性能?

3 个答案:

答案 0 :(得分:5)

如果你说最受欢迎的查询是基于时间的,我建议使用一个列来存储第一个选项中的时间

您可以为应用程序选择自己的纪元,然后从那里开始工作。

这应该简化在搜索时间间隔时需要写入的查询。

另请查看10.3.1. The DATETIME, DATE, and TIMESTAMP Types

  

但是,无法存储微秒   进入任何时态数据的列   类型。任何微秒部分都是   丢弃。转换时间或   DATETIME值为数字形式(for   例如,通过添加+0)结果a   具有微秒部分的双值   .000000

答案 1 :(得分:5)

MySQL将支持微秒,请参阅MySQL 5.6.4 changelog

  

分数秒处理

     

不兼容的变化:MySQL现在允许TIME的小数秒,   DATETIME和TIMESTAMP值,最大为微秒(6位数)   精确。要定义包含小数秒部分的列,   使用语法type_name(fsp),其中type_name是TIME,DATETIME或   TIMESTAMP和fsp是小数秒的精度。例如:

     

创建表t1(t TIME(3),dt DATETIME(6)); fsp值,如果给出,   必须在0到6的范围内。值为0表示没有   分数部分。如果省略,则默认精度为0.(这有所不同   从标准SQL默认值6开始,与之前的兼容性   MySQL版本。)

     

以下各项总结了此更改的含义。看到   第10.3.5节,“时间值的分数秒”。

答案 2 :(得分:0)

如何将日期部分拆分为仅限日期的部分,以及从午夜开始的微秒?当天不到2 ^ 64微秒。然后在{date,microsecond}上对表进行聚类。

我猜,虽然我不知道您的数据,但某些查询对于日级准确度来说没问题 - “1964年的实验”不需要担心微秒。