返回一个大查询或一些较小的查询是否更好?

时间:2010-10-11 22:12:03

标签: mysql

我正在使用MySQL来存储视频游戏数据。我有标题,平台,标签,徽章,评论,开发人员,出版商等表...

当某人正在观看游戏时,最好是让一个查询返回与游戏相关的所有数据,还是最好使用多个查询?直觉上,由于我们有评论,因此将它们包含在同一个查询中似乎毫无意义,因为它们需要进行分页。但是在其他情况下,我不确定是要打破查询还是使用两个查询...

我对性能有点担心,因为我现在正在加入以下表格的游戏:开发者,出版商,元标签,徽章,标题,流派,子类,分类......以获取游戏徽章,(来自games_badges;多对多的游戏桌,多对多到徽章表)我可以做另一个连接,或者运行一个单独的查询....我不确定什么是最好的....

3 个答案:

答案 0 :(得分:13)

使用一个查询比使用多个查询要快得多,因为查询的启动和查询计划本身的计算成本很高,并且连续运行多个查询会使服务器每次都更慢。显然,您应该只获得实际需要的数据,但更少的查询总是更好。

因此,如果您要在页面上显示20个游戏,则可以使用LIMIT子句加快查询(仍然只使用一个查询),并且只有在他们到达下一页时再次运行该查询。那或者你可以让他们等待查询完成并立即获得所有数据。一个大的等待或几个小等待。

tl; dr使用尽可能少的查询。

答案 1 :(得分:10)

没有灵丹妙药。

  1. 始终尝试只获取必要的数据。
  2. 无论一个大的或几个小的查询是否更好,都没有答案。每个案例都是独一无二的,要回答这个问题,您应该对您的应用程序进行概要分析并检查查询“EXPLAIN s

答案 2 :(得分:3)

这通常是一个处理问题。

  • 如果一个查询意味着要检索数千个条目,请调用几个查询让MySQL进行处理(总和等)。
  • 如果进行多个查询涉及制作数十个或数百个查询,则调用单个查询。

显然你总是面对这两个问题,因为如果你问这个问题,两者都不是goto选项,所以选择真的是:

  1. 选择你可以点击
  2. 的那个
  3. 尽可能多地缓存或缓解它,以便您很少受到打击
  4. 尝试在数据库中插入预处理数据以帮助您处理当前数据
  5. 将处理作为cron的一部分进行处理,并让应用程序仅检索数据
  6. 退一步,探索其他可能不需要处理的方法