我需要改进此 SQL UPDATE 查询。该查询必须只更新第一行,但我怀疑它在运行所有行和运行所有行的子查询时使用了大量的能量,因为当使用大型数据库时它非常慢。有什么建议吗?
UPDATE leads l
SET status='processing', processor='$processor'
WHERE pool IN ($pools) AND status='active'
ORDER BY (SELECT count(*) FROM calls c WHERE c.lead = l.id), id ASC
LIMIT 1
更新
缓慢确实是由子选择引起的。通常,领先表中可能有 2000-3000 场比赛。最简单的方法是在线索表中建立一个列,手动计算调用次数,这样我就不需要子选择,但它是一个正在运行的站点,需要在其中进行这些更改,所以如果我现在添加了该列。
但我认为这是避免大型子选择的唯一方法。
最佳答案
对我来说 - 缓慢来自子选择。对于每个池
,您查询所有调用
以计算它们的数量。首先确保 calls.lead
已编入索引。您可以将该计数器保留在池
中,并使用触发器来保持其真实性。另一种选择是将该信息保留在索引内,但我不知道如何在 MySQL 上使用它,特别是在未知版本上
关于mysql - SQL UPDATE 的改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520374/