MySQL缓存和日期函数

时间:2011-01-18 17:13:36

标签: php mysql date query-cache

我曾经在性能博客中读到,最好使用PHP的日期函数在MySQL查询中设置日期,而不是使用像curdate()这样的mysql日期函数,因为mysql可以缓存查询或结果或类似的东西。有没有人对此有任何见解?它是否有水或是无根据的吗?

示例:

$query = 'SELECT id FROM table WHERE publish_date = \''.date('Y-m-d').'\'';

VS

$query = 'SELECT id FROM table WHERE publish_date = CURDATE()';

3 个答案:

答案 0 :(得分:7)

任何包含CURDATE()的函数都不会被缓存。 Source

据我所知,硬编码日期仍应缓存。虽然您可能需要考虑使用prepare功能而不是将字符串拼接到查询中(出于理智和安全考虑)。

答案 1 :(得分:2)

实际上很简单。 MySQL服务器没有看到您的PHP代码,所以它会收到以下其中一个:

SELECT id FROM table WHERE publish_date = '2010-01-18';
SELECT id FROM table WHERE publish_date = CURDATE();

它也不会读你的意图。对于MySQL,'2010-01-18'是一个字符串并且是确定性的:它的值始终是'2010-01-18'。但是,CURDATE()不是确定性的:它的值会根据您运行它的日期而有所不同。因此,第一个是可缓存的,第二个不是。

答案 2 :(得分:0)

我个人首先考虑的是,因为它清楚了解服务器时间(时区),我的mysql服务器发生时间早10小时才被宣传:)

PHP脚本中的

localtime将在SQL中应用