我需要删除比特定日期更早的多个表中的很多行。 其实我这样做:
DELETE FROM trash1 WHERE deletion_date < DATE_SUB(NOW(), INTERVAL 48 HOUR);
DELETE FROM trash2 WHERE deletion_date < DATE_SUB(NOW(), INTERVAL 48 HOUR);
DELETE FROM trash3 WHERE deletion_date < DATE_SUB(NOW(), INTERVAL 48 HOUR);
有没有办法让它变得更好或更快? 是否可以只在一个查询中执行此操作? 感谢。
答案 0 :(得分:1)
我要检查的第一件事是使用EXPLAIN查询WHERE deletion_date < DATE_SUB(NOW(), INTERVAL 48 HOUR)
的效率。
EXPLAIN DELETE FROM trash1 WHERE deletion_date < DATE_SUB(NOW(), INTERVAL 48 HOUR);
等等。您正在查看查询是否使用索引列以及它必须搜索多少行。您希望避免搜索表格中的每一行。
接下来要检查的是deletion_date
是否已编入索引以及索引的类型。因为这是一个范围查询(即“小于”),而不是简单的相等检查,索引的类型可能很重要。有a discussion about optimizing range queries in the MySQL manual。
从那开始,看看它是怎么回事。如果您遇到问题,请发布EXPLAIN的输出。