MySQL:如何根据时间优化删除操作?

yi0zb3m4  于 2023-02-03  发布在  Mysql
关注(0)|答案(2)|浏览(115)

因此,我的同事创建了这个查询,它将在一个有500K以上记录的表上每小时运行一次。

Delete from table where timestamp> now() - interval 24 hour

我有一种感觉,这将是缓慢的,因为它是计算时间,在每一行,我对吗?我该如何优化它?

    • 更新**

对于280万条记录,删除匹配的行大约需要12秒。

cetgtptt

cetgtptt1#

我有一种感觉,这将是较慢的,因为它是计算时间在每一行,我说得对吗?
否,时间计算在查询开始时进行一次。它是查询持续时间的常数值。
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now says:
NOW()返回常量时间,指示语句开始执行的时间。
https://dev.mysql.com/doc/refman/8.0/en/where-optimization.html表示:
索引使用的常量表达式只计算一次。
你还问:
如何优化它?
最简单的方法是确保timestamp列上有索引。
另一种解决方案是使用timestamp列分区,每天删除1个分区。http://mysql.rjweb.org/doc.php/partitionmaint

jq6vz3qz

jq6vz3qz2#

相关问题