使用主键索引删除MySQL中的行

时间:2014-12-17 08:48:24

标签: mysql sql optimization indexing

我正在尝试使用主键搜索删除许多行。

e.g。

DELETE FROM t1 WHERE t1.pid IN (SELECT pid FROM ...);

此处pid是表t1的主键,但在删除时不使用索引。
内部查询返回太多行,因此整个查询占用太多时间,因为外部查询不使用索引。

如何更快地删除这些行?

1 个答案:

答案 0 :(得分:0)

您应该避免使用子查询,而是使用JOIN代替:

DELETE t1
FROM t1 INNER JOIN t2 ON t1.pid = t2.pid
[WHERE .....]

当然t2是您在子查询中获得pid的表格;考虑你也可以添加WHERE子句来限制所选(以及删除的)pid ...
另请考虑pid表上的t2列应编入索引以加快查询...