只是想知道以下在效率方面的最佳做法。
我有一个名为“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添加过滤器。
答案 0 :(得分:3)
连接数据库非常昂贵。你做的越少越好。
另一种说法,更快的是什么? 1000次旅行可以下载1000个箱子或者一次旅行可以下载1000个箱子吗?
答案 1 :(得分:0)
作为一般规则,减少到数据库的往返次数更好,因此通常首选一个巨型查询。
然而,这不是一个规则。如果没有正确设置索引,您的查询实际上可能会慢得多。需要注意的另一件事是代码的复杂性和可维护性。我曾写过一个非常复杂的查询,它连接了大约17个表。调试和修改是一场噩梦。
基准测试至关重要,因为它是衡量性能的唯一工具。实际上,您可能会发现有时拆分查询可能会提高性能。
据我所知,您的查询非常简单,可以在一个查询中进行连接并远离它。
答案 2 :(得分:0)
对于像问题中那样的简单查询,让数据库进行连接。毫无疑问。
可能会对更复杂的查询进行一些讨论,但数据库是为处理大量数据而设计的。尝试在应用程序中复制数据库工作不表示。
也就是说,在某些情况下,数据库优化器/引擎确实会混淆。在这种情况下,可能需要创建临时表或在应用程序中进行工作。这不是一件好事,而是现实。
让应用程序层执行应用程序层最擅长的操作。让数据库做数据库最擅长的事情,这肯定包括处理数据。