MySQL 可以并行化 UNION 子查询(或任何其他查询)吗?

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

我使用数据量较大的分区表。根据 MySQL 文档,ToDo 列表中包含以下内容:

涉及 SUM() 和 COUNT() 等聚合函数的查询可以 轻松并行化。

...但是,我可以使用 UNION 子查询实现相同的功能吗?它们是并行的,还是我必须创建一个多线程客户端来使用所有可能的分区键运行并发查询?


编辑:

这个问题并不严格涉及 UNION 或子查询。我想利用尽可能多的核心来进行查询。有没有办法在不并行化我的应用程序的情况下执行此操作(并确保完成)?

有关于 MySQL 当前并行化功能的好的文档吗?

mysql parallel-processing partitioning
4个回答
5
投票

据我所知,目前在应用程序中使用多个线程/核心运行查询的唯一方法是使用多个连接。这当然使得无法运行作为单个事务一部分的并行查询。


1
投票

严格来说,在一个较大查询中联合在一起的不同查询并不是真正的子查询。

  • 查询按顺序运行
  • 列的数据类型由第一个查询决定
  • 默认情况下,相同的行将被删除(UNION 默认为 DISTINCT)
  • 在运行所有查询之前,结果集尚未完成构建

...无法并行化不同的查询,因为它们实际上都是同一查询的一部分。

您可能想尝试从代码中并行运行不同的查询,然后在查询全部完成后将结果混合到代码中。

有关 UNION 的文档可以在这里找到。


1
投票

我想这里已经回答了类似的问题。 http://forums.mysql.com/read.php?115,84453,84453

(也许我应该将其作为评论发布,但老实说,我在这里找不到评论按钮。)


0
投票

抱歉,你运气不好。

但是,MySQL 8.0 在少数情况下优化器将使用多核。 一般来说,当您需要并行性时,您需要的并行 I/O 多于多个 CPU。而且这种情况很少见。

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