【发布时间】:2023-01-30 00:23:47
【问题描述】:
所以我的同事创建了这个查询,它将每小时在一个有 500K+ 记录的表上运行。
Delete from table where timestamp> now() - interval 24 hour
我觉得这会更慢,因为它是每一行的计算时间,对吗?我该如何优化它?
更新
对于 280 万条记录,删除匹配行大约需要 12 秒。
【问题讨论】:
-
“我对吗?”。不要依靠你的感觉来解决性能瓶颈。首先在删除语句上运行
explain,看看它说了什么:dev.mysql.com/doc/refman/8.0/en/explain.html。 -
另一种测试您的理论是否正确的方法是使用固定时间戳而不是
now() - interval 24 hour运行查询。它明显更快吗?如果没有,你就找错人了…… -
我的猜测是,显着加快速度的方法是在
timestamp列上创建一个索引......这样删除语句就不必测试表中的所有行。但是添加额外的索引可能会对其他方面的性能产生影响。 -
@StephenC 现在用指标更新了问题
-
而且......如果你尝试我建议的替代方案呢?
标签: mysql