我有一个查询
$sql="delete from table where date_add(created_at, INTERVAL 2 DAY) < now()"
查询执行时间超过10秒。为什么查询这么慢?如何提高执行速度?谢谢!
答案 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使用索引删除。