ISOdate / POSIXct vs Milliseconds

时间:2015-05-29 20:15:35

标签: database date datetime storage

这更像是一个思考问题。 我一直在研究不同的时间/日期格式,我注意到似乎最好将日期/时间对象作为变量存储在数据库中的唯一类(如ISOdate或POSIXct)(如Mongo,MySQL,postegen)。

我明白为什么在分析数据时会想要转换为这样的格式,但我想知道当我以数据形式将其存储在数据库中时有什么优势?

这些格式是否比传统数字占用更少的空间? 我似乎无法在网上找到答案。

1 个答案:

答案 0 :(得分:1)

为了论证,我们只谈一个简单的date类型(只是日期,没有时间或时区) - 例如MySQL中的DATE类型。

假设我们存储了一串2014-12-31。一天之后会怎么样?作为一个人,很容易得出答案2015-01-01,但计算机需要编写这些算法。

虽然这些类型可能会暴露具有处理日历数学的算法的API,但它们很可能会将信息存储为自某个开始日期以来的整数天(称为" epoch&#34 )。因此,2014-12-31实际上存储为16701之类的内容。计算机可以非常有效地添加1以在第二天获得16702

这也使得排序更容易。当然,以YYYY-MM-DD格式,字典排序顺序被保留,但它仍然需要更多的处理能力来排序字符串而不是整数。此外,当表示为字符串时,日期可能会格式化为其他文化,例如MM/DD/YYYYDD/MM/YYYY格式,按字典顺序排序。如果您通过数千个日期进入表,然后使用WHEREORDER BY子句进行查询,则数据库需要能够有效地对值进行排序,整数排序比分析字符串要快得多。 / p>

是的 - 它们往往也会减少物理存储空间。

当日期和时间都存在时,同样的原则适用,你还必须与时间值的精确度(秒,毫秒,纳秒等)竞争。