【发布时间】:2021-03-16 14:33:43
【问题描述】:
我正在尝试执行以下操作:假设我有以下 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 <> ''
查询总是在永远占用后超时。我做错了什么还是可以预料到这种行为?
【问题讨论】:
-
您能否解释一下您尝试通过此更新实现的目标?现在看起来像 CROSS JOIN
-
您是在何时何地学习逗号分隔连接的?现在已经过时了将近三年。使用显式连接(例如
INNER JOIN),它已于 1992 年在 SQL 标准中引入。 -
从您的更新声明中,我得出结论,有时每个
kunden_nr_aktivität有一行herkunft_kontakt,有时没有这样的行,而且永远不会超过一个这样的行。您只想用aktionsart = 'foo'更新行,而kunden_nr_aktivität存在这样的行。它是否正确?如果不是,那么您的更新声明是不恰当的。
标签: mysql sql performance