Unioning并行......将SQL服务器做呢?(Unioning in parallel… w

2019-09-19 20:33发布

如果我想从位于不同的驱动器的多个表联合数据,将SQL并行提取数据? 是否有任何相关设置或提示我应该知道的?

Answer 1:

该联盟应并行运行,因为SQL Server 2005中至少。

它不会有所作为,如果表位于不同的驱动器或相同的驱动器。 在现代世界中,磁盘可以是虚拟的,或者有多个读取头。 一个驱动器和多个驱动器之间的区别是越来越少有关。

如果你有MAXDOP设置为1,那么只会有一个线程。

请注意,联盟会比UNION ALL慢得多。

布兰登。 。 。 让我在这里作出回应。 你似乎在老式架构方面来思考。 这些肯定还是存在的。 然而,现代磁盘有多个读取头和多个盘片。 通常情况下,与返回的数据的问题涉及在控制器级别的带宽,而不是读的速度。 您还可以缓存的多层次和预读(有时在文件系统和数据库一级)。 您是经常关闭让数据库引擎管理这种复杂性更好。

举例来说,那我的工作,现在的机器是一个真正的虚拟机。 我使用的磁盘上的EMC箱的分区。 该处理器是在一个大箱子一些的处理器。



Answer 2:

我在SQL Server的多线程的理解是,我们应该把它留给查询优化器 - 查询将并行运行时最佳。

您可以通过使用限制的线程数MAXDOP提示(见什么是使用SQL Server OPTION(MAXDOP 1)目的是什么? )。

默认行为是并行的时候可能和最佳运行。



Answer 3:

我不会指望仅仅通过你的union'ed查询的顺序按特定的顺序返回数据。

对我来说,当我必须做这样的事情,我总是换行整个查询作为子只能选择来处理排序。 像下面

选择pk_id,从价值由PK_id,值(选择pk_id,从表1的工会选择pk_id值,从表2的值)顺序

这样,你永远不会被你得到什么惊讶。



文章来源: Unioning in parallel… will SQL Server do it?