多个大型MySQL SELECT查询 - 更好地并行或在队列中运行?

问题描述 投票:4回答:2

我已经查了一堆这个问题的答案,找不到具体的答案 - 如果我错过了什么,请提前抱歉!另外,我是一个SQL优化菜鸟。

我有一个分析仪表板,它根据用户从大型数据库的请求提取数据。

用户加载的每个页面都会运行许多不同的查询来填充页面的不同部分(不同的图表,表格等)。由于用户可能会请求数年的数据,因此其中一些页面可能需要相当长的时间才能加载。

目前,页面的每个部分都将一个SELECT查询ping到SQL服务器,但由于页面有几个部分,这些查询最终会并行运行。

在队列中运行这些查询会更快 - 允许服务器一次处理一个查询吗?或者保持一切并行,原样是什么?

一次运行它们的额外好处是我们可以运行查询以首先填充页面的“首屏”部分......

希望一切都有意义,请放轻松我:)

mysql sql select query-optimization
2个回答
2
投票

我也说“这取决于”,但我倾向于并行。

  • 可能不应该具有比CPU核心数更多的并行性。
  • 我很少看到一个系统咀嚼所有CPU内核 - 除非它没有足够好的索引。也就是说,在提出问题之前修复索引。
  • 如果数据大于可缓存的数据,则排队可能会更快,因为您可能有一个阻塞点 - I / O.
  • 如果不断更改表,请关闭查询缓存。
  • 您的目标是尽早在页面上获得一些结果(可能是人机界面的目标),在除了一个AJAX被叫者(不是调用者)之外的所有人中添加一个小延迟。
  • 如果可以同时计算多个页面,事情会变得更加复杂。例如,您无法真正控制并行性。

我们来看看查询。也许我们可以加快他们的速度以避免这个问题。


2
投票

这个评论太长了。

这个问题没有正确的答案。在某种程度上,运行并行SELECT查询(通常)将比一个正在运行的查询更快。该点是2个查询还是200个查询取决于查询的性质,硬件配置,数据以及各种组件的速度。

当您考虑可能涉及多少不同的用户以及数据是否正在更新时,情况会变得更加复杂。如果锁启动级联,您可以通过并行查询和更新进入非常糟糕的情况。当然,这也可能发生在同时有多个用户的情况下。

我的猜测是你需要一个限制机制,一次运行n个查询,然后将其余部分放入队列中。

© www.soinside.com 2019 - 2024. All rights reserved.