2011-08-16 57 views
0

我有一個DATETIME字符串,我只需要腳本中的DATE在我的數據庫中執行一些搜索。目前,我腦海中有兩種情況,但不知道哪種情況更快。檢索格式化日期時,哪種情況更快?

第一種方案:

在我的MySQL數據庫,我有兩列:datetime(這是一個DATETIME型)和date(這是一個日期型)。

然後,在我的PHP腳本,每次我保存的記錄,我將我知道的字符串插入到datetime字段,然後將其轉換爲適合date場(我在想是這樣的:$date = date("Y-m-d", strtotime($datetime)))。

這樣,所有必需的作品都存儲在我的數據庫中,我可以在運行中檢索它們(datetimedate字段)。

第二場景:

MySQL數據庫應該只由datetime列。

我的PHP腳本會將已知字符串插入到datetime字段中,而不做任何其他修改。

當我取回我的數據,我會做這樣的事情:SELECT datetime, DATE(datetime) FROM ...

結論

哪個這些場景的速度更快,因此應該使用?日期格式應該保存還是取回?在格式化日期上,MYSQL比PHP快嗎?將所有內容都存儲在數據庫中並以原樣進行檢索,或僅存儲檢索時的最小值和格式是否更好?哪種情況是最佳做法?

謝謝!

回答

2

這取決於你的usecases的:

如果你只打算需要date閱讀,然後使用一個datetime柱,轉換去從datetimedate是夠便宜。

如果您打算選擇給定日期的行(如WHERE date = '2011-08-01'),則請轉至date列,因爲如果添加了一列,這將允許mysql使用date列中的索引。

如果您打算選擇日期範圍內的行,則請轉至datetime列。你可以做像WHERE datetime >= '2011-08-01' AND datetime < '2011-08-16'這樣的事情。

1

第二個是最好的和快速的,因爲你得到的價值基於需求。而是稍後獲得一些價值並繼續努力。

1

IMHO

  • 日期時間,或甚至無符號整數(UNIX時間戳)爲範圍濾波更好
  • 日期時間日期時間允許功能,它可以是用於聚合函數
  • 避免格式化有用從MySQL的數據(這意味着原始)
  • 相關介紹什麼是PHP的責任
+0

所以,你建議我只有'datetime'在我的數據庫中的列,並使用檢索到的'datetime'在PHP中檢索'date'? – linkyndy

+0

是的,'日期,strtotime'是你所需要的 – ajreal

1

肯定取決於你的情況 - 如果你會閱讀(很多)而不是寫作,你可以同時存儲。但我會去存儲一個字段(日期時間),並轉換,無論是在PHP中,或從MySQL中檢索它(將datetime轉換爲你喜歡的格式的字符)