在我们的数据库表中,我们保留了许多计数列,以帮助减少简单查找查询的数量。例如,在我们的用户表中,我们列出了所写的评论数量,上传的照片,朋友,关注者等。为了确保这些评论保持同步,我们有一个定期运行的脚本来检查和更新这些计数列。< / p>
问题在于,现在我们的数据库已经显着增长,我们一直在使用的查询将永远运行,因为它们完全没有效率。我希望有比我更多的MySQL知识的人建议我们如何提高它的效率:
update users
set photos=(select count(*)
from photos
where photos.status="A"
AND photos.user_id=users.id)
where users.status="A";
如果这是一个select语句,我只会使用一个连接,但我不确定这是否可以通过更新。
提前感谢您的帮助!
答案 0 :(得分:4)
你可以做这样的事情
UPDATE users u
JOIN (SELECT user_id,
COUNT(*) AS c
FROM photos
WHERE status = "A"
GROUP BY user_id) pc
ON pc.user_id = u.id
SET u.photos = pc.c
您需要
上的索引