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

时间:2016-08-22 19:11:40

标签: mysql query-optimization

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

i=10
j=0

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

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

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

如何改进此查询?

2 个答案:

答案 0 :(得分:0)

您可以尝试加入

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;

答案 1 :(得分:0)

使用JOIN而不是子查询

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