提高MySQL更新查询效率

时间:2011-03-17 15:45:10

标签: mysql query-optimization

在我们的数据库表中,我们保留了许多计数列,以帮助减少简单查找查询的数量。例如,在我们的用户表中,我们列出了所写的评论数量,上传的照片,朋友,关注者等。为了确保这些评论保持同步,我们有一个定期运行的脚本来检查和更新这些计数列。< / 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语句,我只会使用一个连接,但我不确定这是否可以通过更新。

提前感谢您的帮助!

1 个答案:

答案 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 

您需要

上的索引
  • (photos.status,photos.user_id)
  • (photos.user_id)
  • (users.id)