使用PHP date()函数与SQL datetime字段进行比较是否很慢?

时间:2017-11-02 15:34:22

标签: php mysql sql datetime lamp

我有这个网站,用户每天可以在这里创建如此多的帖子,称为“#clippets'在我检查限制之前,我已经使用了一些SQL来获得'剪辑的总数'在当天。

所以,让我们说我只想让用户制作20个剪辑'一天,不是基于时间,只是基于一天,好像我是在过去的24小时基础上,这就像用户一直在追逐极限......

无论如何,这是我的SQL:

$date = date("Y-m-d");

$sql = "SELECT COUNT(id) FROM clippets WHERE userID = ? AND DATE(createdAt) = '$date'; ";

我的问题是......这是一种缓慢的方法来解决这个问题,使用PHP日期函数然后在SQL查询中使用它,是否将它们视为字符串或?因为createdAt字段是日期时间数据类型,所以MySQL将两个日期转换为字符串然后比较?这是一个缓慢的方式吗?

2 个答案:

答案 0 :(得分:1)

MySQL不会将这两个日期转换为字符串进行比较。它将字符串转换为日期一次,并将其用于所有其他比较。将日期参数作为字符串传递是标准做法,而尝试做其他事情则不是优化的良好来源。

但是,如果您只对当前日期感兴趣,则根本不需要传递日期参数。您可以使用MySQL日期函数来选择所需的行。 this questionthis question中的一种方法应该有用。

例如:

SELECT COUNT(id) FROM clippets WHERE userID = ? AND createdAt >= CURDATE()

答案 1 :(得分:0)

通常,对函数结果进行过滤比对字段进行过滤要慢,特别是对于索引字段。如果您的数据类型包含时间,则过滤器应类似于:

where createdAt >= yourDateVariable
and createdAt < the day after yourDateVariable