繁体   English   中英

如何在MySQL中使这个删除查询更有效?

[英]How to make this delete query more efficient in MySQL?

我有这个查询,在一个有超过100,000条记录的表中大约0.1秒运行,我认为这是好的(d1和d2被索引)

SELECT key_id
FROM `info`
WHERE d1 > 10 AND d1 < 20 AND d2 > 5 AND d2 < 15
GROUP BY `key_id`
HAVING COUNT(*) > 300;

现在我想从另一个表中删除所有这些key_id,所以我尝试了这个:

DELETE FROM `keys` WHERE id IN (<first query>)

密钥表有大约7,000行。 我已经读过子查询每次评估,所以它运行7000次,每次0.1秒〜= 700秒。 非常慢。 没有让它完成,所以我不确定它是否需要700秒。 我所知道的是它需要超过30秒。

如何改进此查询?

您可以尝试加入

DELETE FROM `keys` 
INNER JOIN ( 
SELECT key_id
FROM `info`
WHERE d1 > 10 AND d1 < 20 AND d2 > 5 AND d2 < 15
GROUP BY `key_id`
HAVING COUNT(*) > 300) t on t.key_id = `keys`.id;

使用JOIN而不是子查询

DELETE keys
FROM keys
JOIN (<first query>) AS i
ON k.id = i.key_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM