我在用户表中有大量记录,我想以优化的方式显示此记录。我做了一个查询,但是它们花费了很多执行时间(请参阅查询),而且我已经管理了两个表中的索引,但严重没有成功(请参阅说明)。
我希望每个用户发布计数,为什么我这样查询:
SELECT
(SELECT COUNT(up.`user_id`) FROM `users_post` up WHERE up.`user_id` = uf.`user_id`
) AS user_count
FROM `users` uf;
展开
我在用户表中有大量记录,我想以优化的方式显示此记录。我做了一个查询,但是它们花费了很多执行时间(请参阅查询),而且我已经管理了两个表中的索引,但严重没有成功(请参阅说明)。
我希望每个用户发布计数,为什么我这样查询:
SELECT
(SELECT COUNT(up.`user_id`) FROM `users_post` up WHERE up.`user_id` = uf.`user_id`
) AS user_count
FROM `users` uf;
展开
看起来您所做的只是为所有用户选择每个用户的帖子数。您不需要将查询包装到要查询的结果集中,您应该可以通过
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()。