我想知道为什么MySQL 5.5 myisam表上的DELETE太慢了(我不得不取消它)
此SQL需要一秒钟时间:
_
这个相同的DELETE在2分钟后没有完成(我取消了)
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 - 查询相同的行(刚刚直接通过主键选择) - 花了一秒钟才完成!
DELETE FROM backup
WHERE id > 0
AND userId NOT IN
(SELECT id FROM user WHERE state > 0)
ORDER BY id ASC LIMIT 100;
EDIT 我还尝试使用子子查询进行此修改 - 我在一分钟后将其取消...
DELETE FROM backup WHERE id IN (12, 33, 34, [... 100 ids...])
使用INNER JOIN不能与DELETE一起使用,因为我使用ORDER BY。
有什么想法吗?
答案 0 :(得分:0)
好的,问题实际上是子查询 - 分别是 ORDER BY和LIMIT 语句。
当我省略order by并限制并使用以下查询时,它的速度与预期一样快(在一秒钟内):
DELETE backup FROM backup
INNER JOIN user ON user.id = backup.userId
WHERE backup.id > 0 AND backup.id < 276 AND (state = 0 OR state IS NULL);