2011-03-09 72 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