我在用户表中有一个巨大的记录,我希望以优化的方式显示此记录。我做了一个查询但是他们花了很多执行时间(参见查询)我也已经管理了两个表中的索引但是严重不成功(参见解释)。
我希望每个用户的帖子都计算出我这样查询的原因:
SELECT
(SELECT COUNT(up.`user_id`) FROM `users_post` up WHERE up.`user_id` = uf.`user_id`
) AS user_count
FROM `users` uf;
Expain
![]()
答案 0 :(得分:3)
看起来您正在做的就是为所有用户选择每个用户的帖子数。您不需要将查询包装到要查询的结果集中,您应该只能通过
执行此操作SELECT user_id, count(*) as totalPosts
from user_posts
group by user_id
现在,如果您想要标记其他用户信息,则可以加入users表,例如:
SELECT users.LastName, users.FirstName, etc, user_id, count(*) as totalPosts
from user_posts
join users
on user_posts.user_id = users.user_id
group by user_id
另外,正如zerkms所指出的,如果这是你想要总是作为某种运行总体的东西,我强烈建议更新你的用户表以使“totalPosts”列为整数。然后,只要将新条目添加到user_posts表,它就会触发...
更新用户设置totalPosts = totalPosts +1其中user_id =发布帖子的用户ID
然后,您不必继续重新查询总计。就像S / O处的一些总数一样,用户还有其他总分,总分数等等。对于以下标签,我确信他们也会计算每个标签有多少问题。不要过度使用COUNT()来处理未来的性能杀手......