MySQL性能:使用左连接和多个查询的一个查询

时间:2015-02-12 16:26:14

标签: mysql sql performance

我想实现像你在Facebook上看到的那样:

- Posting status
- Comment status
- Like status (like for comments not implemented yet)

我的表格结构如下:

Posts        Users       Comments    Likes
-------      -------     --------    -------
ID           ID          ID          ID
UserID       Username    PostID      PostID
Content                  UserID      UserID
Date                     Content
                         Date

因此,当有人访问主页面时,系统将显示10个帖子。我的查询在这些表上使用LEFT JOIN

例如,如果有10个帖子没有任何评论和任何喜欢,查询将返回10条记录。

但是对于每个评论或者喜欢,我的查询将在相应的列中返回一个带有一些NULL值的新记录(行)。

最后,想要检索10个帖子,我的查询将返回至少50行(如果每个帖子都有一些评论和喜欢)。

我想知道这是否会在将来引起问题。我想知道我是否应该更好地使用多个查询并将所有结果解析为如下数组:

1. Select the 10 last posts
2. Save the IDs into array and all data into global array
3. Parse the array and make a prepared query for the comments something like: 
   SELECT * FROM COMMENTS WHERE PostID IN (1, 2, 3, 4, 5, 6,...) 
4. Save the result into global array
5. Repeat again for the like table

我希望我的解释很清楚:)谢谢

2 个答案:

答案 0 :(得分:0)

执行一次50行查询可以减少与服务器通信时的开销,另一方面,它会在检索行后添加处理。

这实际上取决于整体解决方案。 但是,除非应用程序对服务器是瓶颈的性能至关重要,否则我会使用10个结果集 - 每行一个,可能使用某个类/小部件/对象来显示页面上的帖子。

答案 1 :(得分:0)

我不是专家,如果我理解你的选择是:

A)单个巨型查询将返回大量NULL和重复值。

[注意:我所说的“全部”,你感兴趣的是所有人) B)三个查询:一个用于所有帖子,一个用于所有评论,一个用于所有评论(全部与用户表一起加入),然后您可以使用您用于查询的任何语言将它们处理为对象或结构或词典数据库中。

我会选择第二种,因为它更容易,并且数量级的增加似乎是良性的,并且设计可能更灵活。

我不想做的是每个帖子一个查询。这可能会比以后更快成为一个问题。至少比A或B早得多。