postgresql 许多数据库调用,还是单个大型调用?

tag5nh1u  于 2023-02-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(107)

数据库设置

我有一个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
    • 缺点:**执行多次调用意味着在服务器和数据库之间来回多次。

以下哪种方法是最佳实践?

我问的是一个玩具模型,但答案适用于如果你有回复内的评论,或更复杂的结构。

pftdvrlh

pftdvrlh1#

一般来说,一次呼叫总是更好,也有例外,但这些都是罕见的,特别是当你还考虑到网络延迟。此外,每个呼叫有自己的 * 事件序列 *。您抱怨的 * 冗余数据 * 适用于您的多个呼叫以及。
所以一次调用会更好。但是你构建它的方式是不正确的。我不确定你的意思是postid是跨行冗余还是行内冗余。你可以通过指定你想要的列来消除行内冗余(放弃select *)。你可以在应用程序的演示管理器中消除跨行冗余。

select p.pastid, p.body, c.commentid, c.body
  from posts p 
  left join comments c 
    on c.postid = p.postid
 order by p.postid, c.commentid 
 limit 10;

注意:left join允许包含没有注解的posts,如果不希望这样,那么就使用join comments ...(即内部连接)。

相关问题