最高效的数据库日期存储方法是什么?

3
我想在SQL数据库中存储日期,但不确定最有效的方法是什么。我想到了两种不同的方法。
首先,人们将能够为每天设置特定的价格。
例如:
3月8日,2011年:$1 3月9日,2011年:$2 3月10日,2011年:$5
对于我的数据库,我考虑将UNIX时间戳存储或将月份、日期和年份分别存储在不同的字段中。
第一种方法:
UNIX时间戳
优点
- 只需一个字段
缺点
- 必须将日期转换为时间戳 - 必须在开始和结束日期之间搜索 - 搜索容易出现错误
月/日/年
优点
- 更容易搜索
缺点
- 更多的字段 - 占用更多的空间 - 将存储大量数据,可能会拖慢数据库速度。
基于以上信息,你会推荐哪种方法?(如果有任何不清楚的地方,我可以进行澄清。)

3
分开的字段?DATE类型有什么问题吗? - Jon
3
我很想点个踩(但我不会的 :-)),因为有太多纯粹的“优化”(注意引号)。对于这些“建议”,我通常会揍一个同事。 - user166390
3
请阅读 http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html —— 如您所见,DATE(3字节)、DATETIME(8字节)和TIMESTAMP(不符合SQL规范,4字节)覆盖了所有“需求”,具体取决于业务要求。我怀疑在激烈的基准测试中,相较于TIMESTAMP(不要使用整数),DATETIME多出的4个字节甚至都不会被注意到。 - user166390
3个回答

9

时间戳 / 日期时间 / 日期字段更高效(它们都以整数形式存储)。
因此,在搜索方面速度要快得多
转换不同日期格式之间存在一些(非常小的)开销,但是,除非您按日期字段加入(这通常不是明智的),否则您不会遇到任何问题,该操作仅发生一次。
我看不出它有什么错误的倾向。


我是说容易出错,比如我错误地转换日期。另外,你说的“连接日期字段”是什么意思? - Flipper
@Flipper 他们的意思是在查询中使用表之间的JOIN。通常情况下,使用日期字段进行表之间的JOIN并不明智。 - Jacob
啊,我一开始就没有使用JOIN。那么总的来说,哪种方式更有效呢?将时间戳存储为整数还是使用SQL提供的DATE列? - Flipper
在日期时间/时间戳/日期字段之间进行连接没有问题。它们都是基于通用积分[每种类型](http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html)--这是一种转换,除非与不兼容的(即文本)字段进行连接--否则没有问题。但通常选择一个“类型”(适合模型的类型)并坚持使用它。 - user166390
@pst - 我不介意你编辑答案。我理解你的意思。 - Itay Moav -Malimovka

4
使用DATE字段,这就是它们的作用。

是的,但它们与整数存储相比是否高效? - Flipper
1
@Flipper 就你所知,是的。 - user166390

2

您可以使用DATETIME或DATE列类型 -- 它们易于搜索,只需一个列,而且在日期范围内搜索也很容易...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接