间隔为

时间:2018-01-05 14:35:54

标签: mysql

我有一个查询

$sql="delete from table where date_add(created_at, INTERVAL 2 DAY) < now()"

查询执行时间超过10秒。为什么查询这么慢?如何提高执行速度?谢谢!

2 个答案:

答案 0 :(得分:1)

当您更改值时,此查询不会在created_at上使用索引。这也意味着MySQL必须为每行添加2天created_at。您可以更改查询日期以确保使用索引并且仅修改日期一次。

delete from table where created_at < date_sub(now(), INTERVAL 2 DAY)

答案 1 :(得分:1)

您应该在created_at字段上创建一个索引,但尚未完成。

我还建议您使用单独的SQL读取当前日期,然后直接比较返回的日期:

$sql = "SELECT date_add(NOW(), INTERVAL 2 DAY) ";
$res = mysqli_query($con, $sql);
$row = mysqli_fetch_array($res);
$now_minus2days = $row[0];

因此,要删除的新SQL将变为:

$sql = "delete from table where created_at < '$now_minus2days'";

这应该确保MySQL使用索引删除。