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

  • 使用decimal()列类型,整数部分对应于某个时间点以来的秒数(我怀疑UNIX纪元是否可以,因为我们必须存储在60年代和50年代进行的测量)。
  • 使用两个整数列,一列表示秒,另一列表示微秒。

最流行的查询是选择与时间间隔相对应的列(即dt_record > 时间 1 且 dt_record < 时间 2)。

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

有帮助吗?

解决方案

如果你说最流行的查询是时基, 我建议使用一列来存储时间,就像您的第一个选项一样.

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

这应该可以简化搜索时间间隔时需要编写的查询。

还可以看看 10.3.1.DATETIME、DATE 和 TIMESTAMP 类型

但是,微秒不能存储到任何时间数据类型的列中。任何微秒部分都被丢弃。将时间或日期时间值转换为数字形式(例如,通过添加+0)会导致双重值,并以.000000的微秒为单位

其他提示

MySQL将支持微秒,参见 MySQL 5.6.4 变更日志:

小数秒处理

不兼容的更改:MySQL现在允许时间,日期和时间戳值的分数秒,最高为微秒(6位)精度。要定义包含分数秒零件的列,请使用语法type_name(fsp),其中type_name是时间,dateTime或timestamp,而fsp是分数秒的精度。例如:

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

以下项目总结了这一变化的影响。另请参见第10.3.5节,“时间值的分数秒”。

将日期部分拆分为仅日期部分和午夜后的微秒怎么样?一天只有不到2^64微秒。然后在{日期,微秒}上对表进行聚类。

我猜想,虽然我不知道你的数据,但某些查询在日级精度下是没问题的——“1964 年的实验”不需要担心微秒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top