首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 合併聯接演算法效能測試

     編輯:關於SqlServer

合併聯接要求兩輸入端已在聯接鍵上排序 (如掃描叢集索引)。若兩大輸入已排序且大小相近,效能接近雜湊聯接;若需額外排序則成本極高。

測試環境

  • workflowinfo1:45 萬筆,workflowid 有索引
  • workflowbase1:4.5 萬筆,id、creater 有索引
  • 條件:creater='4028814110830a1e01108fe379e60061' (1,023 筆)

測試語句

-- Merge Join (強制)
SELECT a.* FROM workflowbase1 a INNER MERGE JOIN dbo.workflowinfo1 b
  ON a.id = b.workflowid AND a.creater = '4028814110830a1e01108fe379e60061';

-- Hash Join (強制)
SELECT a.* FROM workflowbase1 a INNER HASH JOIN dbo.workflowinfo1 b
  ON a.id = b.workflowid AND a.creater = '4028814110830a1e01108fe379e60061';

執行計畫成本比較

Merge vs Hash Join 成本比較

結論

  • 測試案例中 Merge Join 成顯著低於 Hash Join (因 workflowbase1 經 creater 篩選後僅 1,023 筆,且 id 為叢集索引鍵已排序)。
  • 最佳使用時機:
      • 兩輸入皆大且已排序 (索引順序掃描)
      • 無額外排序開銷
      • 聯接鍵唯一或高選擇性
  • 若輸入未排序,優化器傾向 Hash Join;僅在明確知道資料有序時才考慮 MERGE JOIN Hint。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved