【发布时间】:2018-12-18 12:43:42
【问题描述】:
我需要找到 table1 中存在但 table2 中不存在的值,然后从 table1 中删除这些值(两个表都有主键)。问题是表太大,像下面这样的查询需要很多时间:
DELETE
FROM table_1 t1
WHERE NOT EXISTS ( SELECT primarykey FROM table_2 t2 WHERE t1.id = t2.primarykey )
有没有办法分块执行任务,例如一次 300k 行?还是更好的优化解决方案?
【问题讨论】:
-
where t1.id < 300000 * n -
您可能会在子查询上使用
limit,这样您只能返回 X 条记录...连接而不是子查询可能会更快。我在子查询时遇到子查询不使用索引的问题。 -
@user3783243 你能举一个使用连接和限制的查询示例吗?
-
FROM table_1 t1 join primarykey as p1 t1.id = p1.primarykey然后删除WHERE我认为您不需要limit但试一试,看看它是如何执行的。您也可以使用explain查看正在使用/未使用的索引。 -
@ITFreak - 实际删除的行的百分比是多少?要删除的行是否位于表的“末尾”?
标签: php mysql sql performance