MySQL - 使用 IN 子句删除需要更多时间

The*_*Guy 5 mysql innodb delete

在 MySQL 5.6 中,我有大约 6000 万行。我想根据 Id 删除行。这里的Id是主键。

我今天有一个奇怪的行为。

delete from tbl where id=1;
Run Code Online (Sandbox Code Playgroud)

它以毫秒为单位执行。

然后我就这样做了。

CREATE TEMPORARY TABLE DELETE_ID (ID int);
Insert into DELETE_ID select id from (subery1(subquery2(subquery3)));
Run Code Online (Sandbox Code Playgroud)

DELETE_ID 大约有 150 个 ID。

Delete from tbl where id in (select id from DELETE_ID);
Run Code Online (Sandbox Code Playgroud)

花费了 30 多分钟,但删除了一行。

没有锁或死锁。

在 innodb_trx 中,状态有时是fetching rows有时unlocking rows

谁能帮助我理解为什么会发生这种情况?

Aki*_*ina 5

WHERE .. IN大多数情况下速度很慢。

使用多表删除

DELETE tbl.* 
FROM tbl, DELETE_ID 
WHERE tbl.id = DELETE_ID.id
Run Code Online (Sandbox Code Playgroud)