如果我想从位于不同的驱动器的多个表联合数据,将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?