2

只是想知道以下在效率方面的最佳做法是什么。

我有一个名为“blogPosts”的表,其中包含多个字段。我还有一个名为“comments”的表,其中包含一列 blogPost_Id。

一篇博文可能有很多评论。

我想检索有关所有帖子和所有子评论的所有信息,最好尝试将其包含在一个 sql 命令中,如下所示:

SELECT * FROM blogPosts LEFT JOIN comments ON blogPosts.id = comments.blogPost_id

还是这样做更好SELECT * from blogPosts

然后SELECT * from comments WHERE blogPost_id=postId为每个帖子做另一个?

我应该补充一点,我将根据帖子和评论字段向 SQL 添加过滤器。

4

3 回答 3

3

连接到数据库的成本很高。你做的越少越好。

换一种说法,什么更快?进行 1,000 次旅行以送出 1,000 个箱子还是一次旅行以送出 1,000 个箱子?

于 2013-02-08T14:20:23.587 回答
0

作为一般规则,对数据库的往返次数越少越好,因此通常首选一个巨型查询。

但是,这不是规则。如果您没有正确设置索引,您的查询实际上可能会慢很多。要注意的另一件事是代码的复杂性和可维护性。我曾经写过一个非常复杂的查询,它连接了大约 17 个表。调试和修改是一场噩梦。

基准测试至关重要,因为它是衡量绩效的唯一工具。您实际上可能会发现有时拆分查询可能会提高性能。

据我所知,您的查询很简单,可以在一个查询中进行连接并摆脱它。

于 2013-02-08T14:35:13.947 回答
0

对于像问题中的简单查询,让数据库进行连接。对此毫无疑问。

可能会有一些关于更复杂查询的讨论,但数据库是为处理大量数据而设计的。表示尝试在应用程序中复制数据库工作。

也就是说,在某些情况下,数据库优化器/引擎确实会感到困惑。在这种情况下,可能需要创建临时表或在应用程序中进行工作。这不是好事,而是现实。

让应用层做应用层最擅长的事情。让数据库做数据库最擅长的事情,这肯定包括处理数据。

于 2013-02-08T15:13:14.690 回答