2012-07-20 62 views

回答

5

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

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

如果您将MAXD​​OP设置为1,那么只会有一个线程。

请注意UNION将比UNION ALL慢得多。

布兰登。 。 。让我在这里回应。你似乎正在考虑旧式架构。这些肯定还存在。但是,现代磁盘具有多个读取头和多个盘片。通常,返回数据的问题涉及控制器级别的带宽,而不是读取速度。您还有多个级别的缓存和预读(有时在文件系统和数据库级别)。让数据库引擎管理这种复杂性通常会更好。

例如,我现在正在使用的机器确实是一台虚拟机。我使用的磁盘是EMC盒上的分区。处理器是一个大盒子里的一些处理器。

+0

嗯...在我看来,磁盘读取将是最长的部分,如果数据都在同一个磁盘上,那么我认为这将是更有意义的阅读一张表,然后另一个而不是在两者之间来回走动。但是,如果表格位于单独的驱动器上,那么同时读取这两个表格会更快。所以我真的不明白你说这是不是有所作为?我在这里错过了什么? – 2012-07-20 03:20:42

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,价值

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