我们假设我们有两个表:user
和comment
。每个注释都有一个用户的外键和一个线程ID。线程ID不是唯一的。
我们希望通过线程ID和关联用户来获取所有评论。我们知道只有几个与该评论集关联的唯一用户(例如:1000条评论: - :10位用户)。
我有两种策略来进行查询:
使用等号连接:
r.db('test').table('comments').get_all(thread_id, index='t')\
.eq_join('user', r.db('test').table('user'))
使用两个单独的查询:
comments = list(r.db('test').table('comments').get_all(thread_id, index='t').run())
user_ids = set([c['user'] for c in comments])
users = list(r.db('test').table('user').get_all(*users))
哪一个是优先考虑的?或者还有其他更好的解决方案?
在做一些测试时,我发现2.性能更好 - 这是合理的。我们不需要在数据库端链接所有相同的用户,并且传输的数据更小。
它如何符合RethinkDB设计以及RethinkDB如何进行连接?如果RethinkDB有连接,那么我假设某些用法是合理的(例如,当一些注释与关联用户的数量具有相同的顺序时)。