如果我想要位于不同驱动器上的多个表的联合数据,SQL是否会并行拖动数据?有什么相关的设置或提示我应该知道吗?联合并行...将SQL Server做到这一点吗?
2
A
回答
5
该联盟应并行运行,因为SQL Server 2005中
它不会有所作为,如果表位于不同的驱动器或相同的驱动器至少。在现代世界中,磁盘可以是虚拟的,或者具有多个读取磁头。一个驱动器和多个驱动器之间的区别越来越不相关。
如果您将MAXDOP设置为1,那么只会有一个线程。
请注意UNION将比UNION ALL慢得多。
布兰登。 。 。让我在这里回应。你似乎正在考虑旧式架构。这些肯定还存在。但是,现代磁盘具有多个读取头和多个盘片。通常,返回数据的问题涉及控制器级别的带宽,而不是读取速度。您还有多个级别的缓存和预读(有时在文件系统和数据库级别)。让数据库引擎管理这种复杂性通常会更好。
例如,我现在正在使用的机器确实是一台虚拟机。我使用的磁盘是EMC盒上的分区。处理器是一个大盒子里的一些处理器。
2
我对SQL Server多线程的理解是,我们应该将它留给查询优化器 - 查询将在最优时并行运行。
你可以限制使用MAXDOP
提示的线程数量(请参阅What is the purpose for using OPTION(MAXDOP 1) in SQL Server?)。
默认行为是在可能和最佳情况下并行运行。
0
我不会指望按照特定顺序返回的数据,只能通过联合查询的顺序返回。
对于我来说,当我必须做这样的事情时,我总是把整个查询作为一个子选择来处理,只处理排序。像下面
选择pk_id,从( 选择pk_id,值从表1 工会 选择pk_id,值从表2 )为了通过PK_id,价值
这样,你永远不会被你得到什么惊讶值。
嗯...在我看来,磁盘读取将是最长的部分,如果数据都在同一个磁盘上,那么我认为这将是更有意义的阅读一张表,然后另一个而不是在两者之间来回走动。但是,如果表格位于单独的驱动器上,那么同时读取这两个表格会更快。所以我真的不明白你说这是不是有所作为?我在这里错过了什么? – 2012-07-20 03:20:42