我有个问题
$sql="delete from table where date_add(created_at, INTERVAL 2 DAY) < now()"
查询将在10秒以上执行。为什么查询这么慢?如何提高执行速度?谢谢!
busg9geu1#
你应该在你的网站上创建一个索引 created_at 菲尔德,你还没做完。我还建议您使用单独的sql读取当前日期,然后直接比较返回的日期:
created_at
$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使用索引来删除。
fwzugrvs2#
此查询不会使用上的索引 created_at 当你改变值的时候。这也意味着mysql必须在 created_at 每行。您可以更改查询的日期,以确保使用索引,并且日期修改只发生一次。
delete from table where created_at < date_sub(now(), INTERVAL 2 DAY)
2条答案
按热度按时间busg9geu1#
你应该在你的网站上创建一个索引
created_at
菲尔德,你还没做完。我还建议您使用单独的sql读取当前日期,然后直接比较返回的日期:
因此,要删除的新sql变成:
这应该确保mysql使用索引来删除。
fwzugrvs2#
此查询不会使用上的索引
created_at
当你改变值的时候。这也意味着mysql必须在created_at
每行。您可以更改查询的日期,以确保使用索引,并且日期修改只发生一次。