Mysql:一个大的select语句?还是多个小陈述?

时间:2013-02-08 14:17:08

标签: php mysql

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

我有一个名为“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添加过滤器。

3 个答案:

答案 0 :(得分:3)

连接数据库非常昂贵。你做的越少越好。

另一种说法,更快的是什么? 1000次旅行可以下载1000个箱子或者一次旅行可以下载1000个箱子吗?

答案 1 :(得分:0)

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

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

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

据我所知,您的查询非常简单,可以在一个查询中进行连接并远离它。

答案 2 :(得分:0)

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

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

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

让应用程序层执行应用程序层最擅长的操作。让数据库做数据库最擅长的事情,这肯定包括处理数据。