Sql-Server
使用雜湊匹配運算符實現的聯合
我正在查看 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
什麼時候使用它,什麼時候比替代品更好?
雜湊聯合不是很常見。當一個表很寬並且有很多重複項,而另一個表很小(相對較少的行)並且已知是不同的時,這是首選。具有大量重複項的廣泛建構方面發揮了雜湊表的優勢,因為每個重複項只立即儲存一次。
這個怎麼運作
雜湊聯合運算符在上層(建構)輸入上建構一個雜湊表,消除重複項(就像執行不同的雜湊聚合一樣)。然後它從下部(探針)輸入中讀取行。如果雜湊表中沒有匹配,則返回該行。當探測輸入用盡時,運算符返回雜湊表中的每一行。
雜湊聯合不會將探測端的行添加到雜湊表中,因此它無法消除該輸入中的重複項。優化器要麼必須保證唯一性,要麼在探測端添加分組運算符。