检索格式化日期的哪些方案更快?

时间:2011-08-16 11:33:06

标签: php mysql datetime date

我有一个DATETIME字符串,我只需要在我的脚本中使用DATE在我的数据库中执行一些搜索。目前,我脑子里有两个场景,但不知道哪个场景更快。

第一种情况:

在我的MYSQL数据库中,我有两列:datetime(这是DATETIME类型)和date(这是DATE类型)。

然后,在我的PHP脚本中,每次保存记录时,我都会将已知字符串插入datetime字段,然后将其转换为适合date字段(我在考虑类似于:$date = date("Y-m-d", strtotime($datetime)))。

这样,所有必要的部分都存储在我的数据库中,我可以动态检索它们(datetimedate字段)。

第二种情况:

MYSQL数据库应仅包含datetime列。

我的PHP脚本会将已知字符串插入datetime字段而不做任何其他修改。

当我检索我的数据时,我会做类似的事情:SELECT datetime, DATE(datetime) FROM ...

结论

哪些方案更快,因此应该使用?日期格式应该在保存还是检索时进行?在格式化日期,MYSQL比PHP快吗?是否更好地将所有内容存储在数据库中并按原样检索,或者仅在检索时存储最小值和格式?哪种情况是最佳做法?

谢谢!

4 个答案:

答案 0 :(得分:2)

这取决于您的用例:

如果您只需要date进行阅读,那么请使用一个datetime列,从datetime转换为date已足够便宜。

如果要在给定日期选择行(如WHERE date = '2011-08-01'),则转到date列,因为这将允许mysql使用date上的索引列,如果您已添加一个。

如果您要选择日期范围内的行,请转到datetime列。你可以做WHERE datetime >= '2011-08-01' AND datetime < '2011-08-16'之类的事情。

答案 1 :(得分:1)

第二个是最好和最快的,因为您根据要求获得了价值。而是获得一些价值并在以后继续努力。

答案 2 :(得分:1)

IMHO

  • datetime,甚至无符号整数(unix timestamp)更适合范围过滤
  • datetime允许日期时间功能,它可能对聚合函数
  • 有用
  • 避免从mysql格式化数据(这意味着原始)
  • 与演示相关的任何内容都是PHP职责

答案 3 :(得分:1)

绝对取决于你的情况 - 如果你要阅读(很多)而不是写作,你可以存储两者。但我会去存储一个字段(日期时间)并将其转换为PHP或从MySQL中检索它(将datetime转换为您喜欢的格式的字符)