Mysql

MySQL - 使用 IN 子句刪除需要更多時間

  • April 5, 2019

在 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 rowsunlocking rows.

誰能幫我理解為什麼會這樣?

WHERE .. IN在大多數情況下很慢。

使用多表刪除

DELETE tbl.* 
FROM tbl, DELETE_ID 
WHERE tbl.id = DELETE_ID.id

從 tbl 中刪除,其中 EXISTS (SELECT id FROM DELETE_ID WHERE tbl.id = DELETE_ID.id);

引用自:https://dba.stackexchange.com/questions/220224