为什么DELETE需要比SELECT更长的时间(但基于相同主键的DELETE很快)

时间:2018-02-22 15:55:51

标签: mysql

我想知道为什么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。

有什么想法吗?

1 个答案:

答案 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);