Sql-Server

使用雜湊匹配運算符實現的聯合

  • March 16, 2017

我正在查看 TechNet 上列出的 SQL Server 物理運算符(不要判斷,你知道你已經做到了)並讀到 Hash Match 物理運算符有時用於實現UNION邏輯運算符

我從未見過這樣做,並想了解更多。一個範例查詢會很棒。什麼時候使用它,什麼時候比替代品更好?(這些通常是相同的,但並非總是如此。)

一個範例查詢會很棒。

使用數字表(整數 1…n,在此範例中 n 至少需要為 1000):

SELECT N.n % 10, SPACE(100) 
FROM dbo.Numbers AS N 
WHERE N.n BETWEEN 1 AND 1000
UNION
SELECT 999, SPACE(100);

結果:

999
6
4
8
3
1
0
7
5
9
2

雜湊聯合

什麼時候使用它,什麼時候比替代品更好?

雜湊聯合不是很常見。當一個表很寬並且有很多重複項,而另一個表很小(相對較少的行)並且已知是不同的時,這是首選。具有大量重複項的廣泛建構方面發揮了雜湊表的優勢,因為每個重複項只立即儲存一次。

這個怎麼運作

雜湊聯合運算符在上層(建構)輸入上建構一個雜湊表,消除重複項(就像執行不同的雜湊聚合一樣)。然後它從下部(探針)輸入中讀取行。如果雜湊表中沒有匹配,則返回該行。當探測輸入用盡時,運算符返回雜湊表中的每一行。

雜湊聯合不會將探測端的行添加到雜湊表中,因此它無法消除該輸入中的重複項。優化器要麼必須保證唯一性,要麼在探測端添加分組運算符。

引用自:https://dba.stackexchange.com/questions/167086