【发布时间】:2018-08-02 13:28:01
【问题描述】:
我想知道为什么我在 MySQL 5.5 myisam 表上的 DELETE 太慢了(我不得不取消它)
这条 SQL 不到一秒钟:
SELECT id FROM backup
WHERE id > 0
AND userId NOT IN
(SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100;
这个相同的 DELETE 在 2 分钟后没有完成(我取消了它)
DELETE FROM backup
WHERE id > 0
AND userId NOT IN
(SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100;
但是下面的 DELETE - 查询相同的行(刚刚被他们的主键直接选择) - 花了不到一秒钟的时间完成!
DELETE FROM backup WHERE id IN (12, 33, 34, [... 100 ids...])
编辑 我还尝试使用子子查询进行此修改 - 我在一分钟后取消了它...
DELETE FROM backup WHERE id IN (
SELECT ID FROM (
SELECT id FROM backup WHERE id > 0
AND userId NOT IN (SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100
) a
);
使用 INNER JOIN 不适用于 DELETE,因为我使用 ORDER BY。
有什么想法吗?
【问题讨论】:
-
谢谢你,但我试过了 - 它没有帮助。查看我的编辑...
标签: mysql