User
モデル:
user_id phone_no
------- --------
1 555-0001
2 555-0002
.
.
すべてのユーザーは自分の電話番号を持っています。
Friend
モデル:
user_id phone_no
------- --------
user 1 555-0002
user 1 555-0003
user 2 555-0001
user 2 555-0004
ユーザーは多数の電話番号を持っている場合があります。電話番号の一致は、友人 (一方向) と見なされます。たとえば、 の所有者555-0003
は の友人でありuser 1
、その逆ではありません。
Topic
モデル:
topic_id user_id title
-------- ------- -----
1 1 Hello
2 1 Hi
ユーザーの友人による最新の 10 件のトピックを取得するクエリを最適化するにはどうすればよいですか?
私は次のようなものを試しました:
user = User.find(2) # any user
phones = Friend.all(:conditions=>['user_id = ?',user.id],:select=>'phone_no').map {|x| x.phone_no}
friends = User.all(:conditions=>['phone_no in (?), phones]).map {|x| x.user_id}
topics = Topic.all(:conditions=>['user_id in (?), friends], :limit => 10, :order => 'updated_at DESC')
しかし、クエリを分割するときのパフォーマンスが心配でした。この ActiveRecord クエリを最適化するにはどうすればよいですか?