gpt4 book ai didi

mysql - 获取关注或公共(public)用户的关系

转载 作者:行者123 更新时间:2023-11-30 00:30:39 24 4
gpt4 key购买 nike

我正在开发一款社交应用程序。我有可以拥有私有(private)帐户的用户。用户还可以互相关注。使用 ActiveRecord 或纯 SQL 获取用户上 has_many 的所有记录(属于我关注的人或属于公共(public)用户)的最快方法是什么。在伪代码中:

User.get_all_posts_for_users_being_followed_by(我) + User.get_all_posts_for_public_users

我有这个:

SELECT `posts`.*
FROM `posts`
WHERE ( user_id IN (SELECT id
FROM users
WHERE visibility = 'all'
UNION
SELECT followable_id
FROM follows
WHERE followable_type = "User"
AND follower_type = "User"
AND follower_id = 4
AND follows.status = 1) )

但我希望可能有一种更快的方法来处理这个问题,或者使用 Rails 查询方法来做到这一点。

最佳答案

您可以使用ActiveRecord执行清晰的查询,但我建议使用这个纯净版本的for_now,因为现在修改它非常容易。您需要注意这一点:

  1. 如果添加索引,查询可能会更快

    add_index :users, :visibility, :name => 'visibility_ix'
  2. 选择带有 * 通配符的所有列将导致查询的含义和行为在表架构更改时发生更改,并可能导致查询检索过多数据。

  3. IN() 和 NOT IN() 子查询优化不佳。 MySQL 将子查询作为外部查询中每一行的依赖子查询来执行。这是 MySQL 5.5 及更早版本中出现严重性能问题的常见原因。该查询可能应该分别重写为 JOIN 或 LEFT OUTER JOIN。

关于mysql - 获取关注或公共(public)用户的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com