在 MySQL 5.6 中,我有大约 6000 万行。我想根据 Id 删除行。这里 Id 是主键。
我今天有一个奇怪的行为。
delete from tbl where id=1;
它以毫秒为单位执行。
然后我做了这个。
CREATE TEMPORARY TABLE DELETE_ID (ID int);
Insert into DELETE_ID select id from (subery1(subquery2(subquery3)));
DELETE_ID 有大约 150 个 ID。
Delete from tbl where id in (select id from DELETE_ID);
它花费了 30 多分钟,但删除了一行。
没有锁或死锁。
在 innodb_trx 中,有时状态fetching rows
为unlocking rows
.
谁能帮我理解为什么会这样?
WHERE .. IN
在大多数情况下很慢。使用多表删除:
从 tbl 中删除,其中 EXISTS (SELECT id FROM DELETE_ID WHERE tbl.id = DELETE_ID.id);