我正在尝试使用主键搜索删除许多行。
e.g。
DELETE FROM t1 WHERE t1.pid IN (SELECT pid FROM ...);
此处pid
是表t1
的主键,但在删除时不使用索引。
内部查询返回太多行,因此整个查询占用太多时间,因为外部查询不使用索引。
如何更快地删除这些行?
答案 0 :(得分:0)
您应该避免使用子查询,而是使用JOIN
代替:
DELETE t1
FROM t1 INNER JOIN t2 ON t1.pid = t2.pid
[WHERE .....]
当然t2
是您在子查询中获得pid的表格;考虑你也可以添加WHERE
子句来限制所选(以及删除的)pid ...
另请考虑pid
表上的t2
列应编入索引以加快查询...