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

SSIS 合併元件深度解析:Merge、Merge Join、Union All 差異與 Sort 同步/非同步特性

     編輯:關於SqlServer

SSIS 資料流程提供三種合併資料的元件,功能相似但適用場景截然不同。本文以實際資料集示範三者設定差異,並解析 Sort 元件同步/非同步 對效能的影響。

測試資料準備

來源 1:資料表 DEMO_MG_Customer

CREATE TABLE DEMO_MG_Customer (
    CustomerID INT PRIMARY KEY,
    CustomerCompany NVARCHAR(255),
    CustomerName NVARCHAR(20),
    CustomerAddress NVARCHAR(255)
);
INSERT INTO DEMO_MG_Customer VALUES
(1,'HFBZG','Allen,Michael','Obere Str. 0123'),
(2,'MLTDN','Hassall, Mark','Avda. de la Constitución 5678'),
(3,'KBUDE','Peoples, John','Mataderos 1000');
資料表內容

來源 2:文字檔 Customer.txt

ID,Company,CustomerName,Title,Address
1,'NRZBB','Allen,Michael','Sales Representative','Obere Str. 0123'
2,'MLTDN','Hassall, Mark','Owner','Avda. de la Constitución 5678'
3,'KBUDE','Peoples, John','Owner','Mataderos  7890'
4,'HFBZG','Arndt, Torsten','Sales Representative','7890 Hanover Sq.'
5,'HGVLZ','Higginbotham, Tom','Order Administrator','Berguvsvgen  5678'

三大合併元件比較表

元件輸入數前置條件輸出特性典型用途
Merge21. 中繼資料完全相同 (欄位名、型別、長度)
2. **兩路輸入皆已排序** (需設定 SortKeyPosition)
保留排序順序,不去重合併兩個已排序的同結構來源 (如多月份分區表)
Merge Join21. 兩路輸入皆已排序
2. 指定 Join Key (支援 Inner/Left/Full Outer)
依 Join Key 關聯,可選輸出欄位關聯兩個已排序來源 (如主檔+明細檔)
Union All2~n無排序要求,僅需中繼資料相容單純堆疊,不排序、不去重快速合併多個同結構來源 (如每日匯入檔)
三元件比較圖

實作示範:Merge 元件

  1. 資料流程放入兩個 OLE DB Source / Flat File Source。
  2. 各接一個 Sort 元件,依 CustomerID 遞增排序,並將 SortKeyPosition 設為 1。
  3. 連接至 Merge 元件,輸出接 Flat File Destination。
  4. 執行封裝,輸出檔將包含 1~5 筆依 ID 排序的資料 (來源 1 的 1~3、來源 2 的 1~5,共 8 筆,含重複 ID)。
Merge 資料流程設計介面

Sort 元件同步/非同步關鍵知識

  • Sort 為非同步元件:需將所有資料列緩存記憶體中完成排序,才開始輸出下游。
  • 大量資料 (百萬列以上) 會佔用大量記憶體,甚至溢寫至磁碟 (BLOBTempStoragePath),嚴重拖慢效能。
  • 優化策略:
    ① 來源端 SQL 查詢直接加 ORDER BY,並設定輸出資料行 IsSorted=TRUE、SortKeyPosition,省略 Sort 元件。
    ② 若必須用 Sort,調整 DefaultBufferMaxRows、DefaultBufferSize 並指定高速磁碟給 BLOBTempStoragePath。
    ③ 評估改用 Union All + 下游 Sort (單一排序) 取代多路預排序。

選擇建議

  • 同結構、已排序、需保序 → Merge。
  • 異結構、需關聯、已排序 → Merge Join。
  • 同結構、不需排序、單純堆疊 → Union All (效能最佳)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved