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

dpq*_*dpq 10 mysql performance datetime time-precision

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

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

最流行的查询是选择对应于时间间隔的列(即dt_record> time1和dt_record <time2).

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

Adr*_*der 5

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

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

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

另请参阅10.3.1.DATETIME,DATE和TIMESTAMP类型

但是,微秒不能存储到任何时态数据类型的列中.任何微秒部分都被丢弃.将TIME或DATETIME值转换为数字形式(例如,通过添加+0)会产生一个double值,其微秒部分为.000000


amr*_*mra 5

MySQL将支持微秒,请参阅MySQL 5.6.4更改日志:

分数秒处理

不兼容的更改:MySQL现在允许TIME,DATETIME和TIMESTAMP值的小数秒,精度高达微秒(6位).要定义包含小数秒部分的列,请使用语法type_name(fsp),其中type_name为TIME,DATETIME或TIMESTAMP,fsp是小数秒精度.例如:

CREATE TABLE t1(t TIME(3),dt DATETIME(6)); fsp值(如果给定)必须在0到6的范围内.值0表示没有小数部分.如果省略,则默认精度为0.(这与标准SQL默认值6不同,以便与以前的MySQL版本兼容.)

以下各项总结了此更改的含义.另请参见第10.3.5节"时间值中的小数秒".