我有这个查询,在一个有超过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秒。
如何改进此查询?
答案 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