数据库设置
我有一个PostgreSQL数据库,表帖子和评论都是关于帖子的。
这些表具有列,
- 帖子**:帖子ID、正文
- 评论**:注解,后注 *,正文
(显然是评论. postid引用帖子. postid)
问题
我想让服务器从数据库中获取一篇文章,以及该文章的前10条评论(给定POSTID
)。
调用数据库的方法有两种
1)使用一个大调用
该调用类似于
select * from posts
where postid = POSTID
join
select * from comments
where comments have POSTID
- 缺点:**
由于postid
列将为每个条目返回,因此存在冗余数据,我们希望它只返回一次。
而且,我认为执行单个调用意味着数据库必须运行一系列事件(不是并行的,那样会更慢)
2)使用两个较小的调用
电话号码是
select * from posts
where postid = POSTID
然后
select * from comments
where postid = POSTID
- 缺点:**执行多次调用意味着在服务器和数据库之间来回多次。
以下哪种方法是最佳实践?
我问的是一个玩具模型,但答案适用于如果你有回复内的评论,或更复杂的结构。
1条答案
按热度按时间pftdvrlh1#
一般来说,一次呼叫总是更好,也有例外,但这些都是罕见的,特别是当你还考虑到网络延迟。此外,每个呼叫有自己的 * 事件序列 *。您抱怨的 * 冗余数据 * 适用于您的多个呼叫以及。
所以一次调用会更好。但是你构建它的方式是不正确的。我不确定你的意思是
postid
是跨行冗余还是行内冗余。你可以通过指定你想要的列来消除行内冗余(放弃select *)。你可以在应用程序的演示管理器中消除跨行冗余。注意:
left join
允许包含没有注解的posts
,如果不希望这样,那么就使用join comments ...
(即内部连接)。