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

使用PHP date()func与SQL datetime字段进行比较是否很慢?,php,mysql,sql,datetime,lamp,Php,Mysql,Sql,Datetime,Lamp,我有一个网站,我知道一个用户每天可以创建这么多的帖子,称为“clippets”,在我检查限制之前,我使用了一些SQL来获取当天的“clippets”总数 比如说,我只想让用户每天做20次“剪辑”,而不是基于时间,虽然只是一天,好像我是基于过去24小时,这就像用户一直在追逐极限一样 无论如何,以下是我的SQL: $date = date("Y-m-d"); $sql = "SELECT COUNT(id) FROM clippets WHERE userID = ? AND DATE(creat

我有一个网站,我知道一个用户每天可以创建这么多的帖子,称为“clippets”,在我检查限制之前,我使用了一些SQL来获取当天的“clippets”总数

比如说,我只想让用户每天做20次“剪辑”,而不是基于时间,虽然只是一天,好像我是基于过去24小时,这就像用户一直在追逐极限一样

无论如何,以下是我的SQL:

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

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

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

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

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

例如:

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

通常,对函数结果的过滤比对字段的过滤慢,尤其是对索引字段。如果您的数据类型包括时间,则过滤器应类似于:

where createdAt >= yourDateVariable
and createdAt < the day after yourDateVariable
其中createdAt>=yourDateVariable
和createdAt<日期变量的第二天

为什么不自己测试呢?在每种情况前后使用microtime()并进行比较?@ofirbarch是使用
microtime()
slow?您是否尝试过现在使用mysql函数()?@YvesLeBorg我的意思是他应该在这两种情况下都使用microtime(),以测试代码的效率。还是你在挖苦人?@OfirBaruch误导的挖苦,仅此而已。可能比
nanotime()慢(
但是:)