2011-03-09 73 views
3

所以我正在寻找在我的SQL数据库中存储日期,我不知道最有效的方式是什么。我想到了两种不同的方法。最高效的数据库日期存储方法?

首先,人们将能够为每一天设置一定的价格。

例如:

2011年3月8日:$ 1

2011年3月9日:2011年3月10,$ 2

:$ 5

对于我的数据库我是考虑存储一个UNIX时间戳或在单独的字段中存储月份,日期和年份。

第一种方法:

Unix时间戳

优点

  • 仅一个字段

缺点

  • 必须转换日期时间戳
  • 容易出错的搜索

月/日/年

优点开始和结束日期之间进行搜索

  • 更容易搜索

缺点

  • 更多领域
  • 占用更多的空间
  • 要存储的数据的很多,所以可以在数据库放缓。

有了上述信息,您会有什么建议? (我可以澄清是否有任何这是不明确。)

+3

单独的字段? “DATE”类型有什么问题? – Jon 2011-03-09 01:57:31

+3

我很想投降(但我不会:-),只是因为纯粹的“优化”(注意引号)的数量。我通常会为这些“建议”打击同事。 – 2011-03-09 02:09:04

+3

请阅读http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html - 你可以看到,DATE(3字节),DATETIME(8字节)和TIMESTAMP(不是SQL 'spec,4个字节)涵盖了所有的“需求”,具体取决于业务需求。我怀疑在一个TIMESTAMP(和* DO NOT使用整数*)的情况下,DATETIME的额外4个字节在攻击性基准测试中甚至会显而易见。 – 2011-03-09 02:15:24

回答

9

时间戳记/日期时间/日期字段更高效(它们都存储为整数)。
因此,搜索是很多在那。
在不同的日期格式之间有一个小的(非常)的转换开销,但是,除非你通过日期字段加入(这是...通常...不是很聪明),你没有问题,它只会发生一次。
我不明白它是如何容易出错的。

+0

我说错误容易,就像我错误地转换日期。另外,加入日期字段意味着什么? – Flipper 2011-03-09 02:06:36

+0

@Flipper他们的意思是在查询中的表之间使用JOIN。使用日期字段的表之间的JOIN通常不够智能。 – Jacob 2011-03-09 02:08:08

+0

啊。首先我不使用JOIN。所以最后这会更有效吗?时间戳存储为整数或由SQL给出的DATE列? – Flipper 2011-03-09 02:10:37

2

你可以使用一个DATETIME或DATE列类型 - 易查,只是一列,且易于日期范围内进行搜索......

4

使用DATE字段,这就是他们的用途。

+0

是的,但它们对整数存储有效吗? – Flipper 2011-03-09 02:07:19

+1

@Flipper尽可能多的你会发现 - 是的。 – 2011-03-09 02:09:26