我曾经在性能博客中读到,最好使用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()';
答案 0 :(得分:7)
答案 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中应用