6

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

例子:

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

对比

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

3 回答 3

7

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

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

于 2011-01-18T17:17:44.363 回答
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()它不是确定性的:它的值取决于您运行它的日期。因此,第一个是可缓存的,而第二个不是。

于 2011-01-18T17:21:57.917 回答
0

我个人更喜欢第一种方式,因为它可以清楚地了解服务器时间(时区),我的 mysql 服务器在承诺时碰巧早了 10 小时:)

PHP 脚本中的本地时间将应用于 SQL

于 2011-01-18T17:18:56.360 回答