Performance 高效使用GORM检索连接数据-Grails2.3

Performance 高效使用GORM检索连接数据-Grails2.3,performance,query-optimization,gorm,grails-2.0,Performance,Query Optimization,Gorm,Grails 2.0,我有一个User和Follow域类,它构造了Follower,并遵循类似Twitter的关系。当我的用户访问其他用户的页面时,单击他们的关注者列表。我弹出受访人员的关注者列表,然后在其前面显示一个标记为“关注”或“取消关注”的按钮,具体取决于您是否已经关注该人员。所以我按照下面的方法做,但我不确定这是否有效,或者是否有更好的方法。为了提高效率,我一次只检索20个跟随者并允许分页 > example of pop-up: > ------------------------------

我有一个User和Follow域类,它构造了Follower,并遵循类似Twitter的关系。当我的用户访问其他用户的页面时,单击他们的关注者列表。我弹出受访人员的关注者列表,然后在其前面显示一个标记为“关注”或“取消关注”的按钮,具体取决于您是否已经关注该人员。所以我按照下面的方法做,但我不确定这是否有效,或者是否有更好的方法。为了提高效率,我一次只检索20个跟随者并允许分页

> example of pop-up:
> ----------------------------------------------
> alex [follow]
> dave [unfollow]
> sarah[follow]
> paul [follow]
> ----------------------------------------------
以下域类具有:

// The person to follow
User follow
// The person who is following the follow
User follower
// The status of the relationship if removed or still following
boolean status
UserDomain类是典型的SpringSecurity用户类,包含一系列额外的字段,如位置等

在我的控制器中,当我收到对跟随者列表的请求时,我执行以下操作

def visitedUser = User.get(visitedUserId)
// get the list of top 20 followers of this user
def followerList = Follow.findAllByFollow(visitedUser, [max:20])

// get the list of all people current user follow who is in the 20 follower list
def mutualFollow = Follow.findAllByFollowerAndFollowInList(currentUser, followerList)
现在我有了我所拜访的人的所有追随者的名单,以及那些相互信任的人的名单。然后我将两者传递给我的GSP,并在GSP中循环通过followerList,比较跟随者的id,如果跟随者存在于我的mutualFollow列表中,我将按钮调整为“unfollow”,否则我保留按钮如下

进一步优化这一点的一个步骤是用户投影,只检索mutualFollow的id,而不是整个用户域对象,但是由于返回的用户是代理的,并且他们周围有包装器,我不确定这会有多大区别。因为我检索到的只是id


我赞赏任何改进这种方法或替代方法的建议。谢谢

我决定使用HQL,只在follow列表中检索那些用户的必要信息,然后我加入了一个获取他们共同关注的人的行列。并在普惠制页面中使用。以下是SQL中的简化解决方案:

SELECT Ur.follow_id, Urs.follow_id as mutual FROM (SELECT * FROM FOLLOW WHERE FOLLOWER_ID=1)as Urs
RIGHT JOIN (SELECT * FROM FOLLOW WHERE FOLLOWER_ID=3) as Ur
ON Urs.follow_id=Ur.follow_id order by Ur.follow_id;