2012-07-20 69 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,價值

這樣,你永遠不會被你得到什麼驚訝值。