为什么我的 SELECT 查询需要这么长时间,而我的 SELECT 查询不需要?



我正在尝试执行以下操作:假设我有以下SELECT查询(请原谅德语列名(:

SELECT  a1.aktivitäts_id, a1.herkunft_kontakt, a1.aktionsart,
a1.aktionstyp, a2.aktivitäts_id, a2.herkunft_kontakt,
a2.aktionsart, a2.aktionstyp, a2.datum
FROM  Aktivitäten a1, Aktivitäten a2
WHERE  a1.kunden_nr_aktivität = a2.kunden_nr_aktivität
AND  a1.aktionsart = 'foo'
AND  a2.herkunft_kontakt <> '' 

此查询大约需要4秒(数据库总共有大约100万条记录(,并返回大约400条记录。然而,当我想用以下语句更新这些相同的记录时

UPDATE  Aktivitäten a1, Aktivitäten a2
SET a1.herkunft_kontakt = a2.herkunft_kontakt
WHERE  a1.kunden_nr_aktivität = a2.kunden_nr_aktivität
AND  a1.aktionsart = 'foo'
AND  a2.herkunft_kontakt <> '' 

查询总是在花费很长时间后超时。我是做错了什么,还是这种行为是意料之中的事?

首先,学习JOIN!!!第二,不同之处可能是您更新了太多的行,而且可能一行更新了多次。我可能建议在加入之前尝试聚合

UPDATE Aktivitäten a1 JOIN
(SELECT kunden_nr_aktivität, MAX(herkunft_kontakt) as herkunft_kontakt
FROM Aktivitäten a2
WHERE a2.herkunft_kontakt <> ''
GROUP BY kunden_nr_aktivität
) a2
USING (kunden_nr_aktivität)
SET a1.herkunft_kontakt = a2.herkunft_kontakt 
WHERE a1.aktionsart = 'foo' ; 

可能有帮助的综合指数:

a1:  (aktionsart, kunden_nr_aktivit)   -- in this order
a2:  (kunden_nr_aktivit, herkunft_kontakt)

最新更新