2011-08-16 23 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转换为你喜欢的格式的字符)