我们正在编写一个支持MySQL的科学工具。问题是,我们的日期时间字段需要微秒精度,MySQL目前不支持。我在这里看到至少两个解决方法:
最受欢迎的查询是选择与时间间隔相对应的列(即dt_record> time1和dt_record< time2)。
在大型表(数百万行)的情况下,这些方法中的哪一种(或者可能是另一种方法)可能提供更好的性能?
答案 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年的实验”不需要担心微秒。