0

我在用户表中有大量记录,我想以优化的方式显示此记录。我做了一个查询,但是它们花费了很多执行时间(请参阅查询),而且我已经管理了两个表中的索引,但严重没有成功(请参阅说明)。

我希望每个用户发布计数,为什么我这样查询:

SELECT 
(SELECT COUNT(up.`user_id`) FROM `users_post` up WHERE up.`user_id` = uf.`user_id`
) AS user_count 
FROM `users` uf;

展开 在此处输入图像描述

4

1 回答 1

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 上的一些总数一样,用户还有其他总分、总 awrd 等统计数据。对于随后的标签,我相信他们也可以计算每个标签有多少问题。不要在将成为未来性能杀手的事情上过度使用 COUNT()。

于 2012-05-06T11:30:36.493 回答