MySQL从多个表中删除

时间:2014-02-02 20:26:05

标签: mysql sql sql-delete

我需要删除比特定日期更早的多个表中的很多行。 其实我这样做:

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);

有没有办法让它变得更好或更快? 是否可以只在一个查询中执行此操作? 感谢。

1 个答案:

答案 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的输出。