【发布时间】:2019-06-03 12:39:53
【问题描述】:
假设,我们有两个实体\表 - 用户和游戏(可以是任何东西)。用户可以将多个游戏标记为收藏。所以我们还有一个 user_favourite_game (user_id, game_id) 表。
然后假设,用户正在获取所有可用游戏的列表,其中一些应该具有“最喜欢”标志 = true(使用分页,因此我们假设每次获取 20 个游戏)。所以我在这里看到了两种方法:
- 我们可以提出一个填充“收藏夹”字段的请求,例如。 g.
SELECT
g.*,
ufg.game_id IS NOT NULL AS favourite
FROM
games g LEFT JOIN
user_favourite_game ufg ON ufg.user_id = :userId AND g.id = ufg.game_id
ORDER BY
g.id;
- 我们可以选择游戏,然后执行 20 次请求来检查游戏是否是用户的最爱。
哪种方法更好用,为什么?还有其他想法吗?
在上一个项目中,我们使用了第二种方法,因为每个实体所需的计算都很复杂。所以它比上面的例子要复杂得多,而且几乎不可能在单个查询中计算出来。
但总的来说,在我看来,在这种简单的情况下,使用 JOIN 的单个查询应该比 20 个简单查询运行得更快。虽然,我不确定当我们在 user_favourite_game 表中有大量数据时它会如何表现
【问题讨论】:
标签: sql hibernate web-services request spring-data-jpa