Ảnh chụp màn hình # 1 chỉ ra một số điểm để phân biệt giữa Phép chuyển đổi Kết hợp Kết hợp
và Tra cứu chuyển đổi
.
Về Tra cứu:
Nếu bạn muốn tìm các hàng khớp trong nguồn 2 dựa trên đầu vào nguồn 1 và nếu bạn biết sẽ chỉ có một hàng khớp cho mỗi hàng đầu vào, thì tôi khuyên bạn nên sử dụng thao tác Tra cứu. Một ví dụ sẽ là bạn OrderDetails
bảng và bạn muốn tìm Id đơn hàng
phù hợp và Số khách hàng
, thì Lookup là một lựa chọn tốt hơn.
Về hợp nhất Tham gia:
Nếu bạn muốn thực hiện các phép nối như tìm nạp tất cả các Địa chỉ (Nhà riêng, Cơ quan, Khác) từ Địa chỉ
bảng cho một Khách hàng nhất định trong Khách hàng
thì bạn phải chọn Merge Join vì khách hàng có thể có 1 hoặc nhiều địa chỉ được liên kết với họ.
Một ví dụ để so sánh:
Đây là một tình huống để chứng minh sự khác biệt về hiệu suất giữa Merge Join
và Tra cứu
. Dữ liệu được sử dụng ở đây là kết hợp 1-1, đây là tình huống duy nhất phổ biến giữa chúng để so sánh.
-
Tôi có ba bảng tên là
dbo.ItemPriceInfo
,dbo.ItemDiscountInfo
vàdbo.ItemAmount
. Tạo tập lệnh cho các bảng này được cung cấp trong phần tập lệnh SQL. -
Các bảng
dbo.ItemPriceInfo
vàdbo.ItemDiscountInfo
cả hai đều có 13.349.729 hàng. Cả hai bảng đều có ItemNumber là cột chung. ItemPriceInfo có thông tin Giá và ItemDiscountInfo có thông tin giảm giá. Ảnh chụp màn hình # 2 hiển thị số hàng trong mỗi bảng này. Ảnh chụp màn hình # 3 hiển thị 6 hàng trên cùng để đưa ra ý tưởng về dữ liệu có trong các bảng. -
Tôi đã tạo hai gói SSIS để so sánh hiệu suất của các phép chuyển đổi Kết hợp Tham gia và Tra cứu. Cả hai gói đều phải lấy thông tin từ các bảng
dbo.ItemPriceInfo
vàdbo.ItemDiscountInfo
, tính tổng số tiền và lưu nó vào bảngdbo.ItemAmount
. -
Gói đầu tiên được sử dụng
Merge Join
và bên trong nó đã sử dụng INNER JOIN để kết hợp dữ liệu. Ảnh chụp màn hình # 4 và # 5 hiển thị việc thực thi gói mẫu và thời lượng thực thi. Phải mất05
phút14
giây719
mili giây để thực thi gói dựa trên chuyển đổi Merge Join. -
Gói thứ hai được sử dụng
Lookup
chuyển đổi với Full cache (là cài đặt mặc định). ảnh chụp màn hình # 6 và # 7 hiển thị việc thực thi gói mẫu và thời lượng thực thi. Phải mất11
phút03
giây610
mili giây để thực thi gói dựa trên chuyển đổi Tra cứu. Bạn có thể gặp phải thông báo cảnh báo. Đây là một liên kết nói về cách tính kích thước bộ nhớ cache tra cứu. Trong quá trình thực thi gói này, mặc dù tác vụ Luồng dữ liệu hoàn thành nhanh hơn, việc dọn dẹp đường ống vẫn mất rất nhiều thời gian. -
Điều này không nghĩa là Chuyển đổi tra cứu là xấu. Chỉ là nó phải được sử dụng một cách khôn ngoan. Tôi sử dụng nó khá thường xuyên trong các dự án của mình nhưng một lần nữa tôi không xử lý hơn 10 triệu hàng để tra cứu hàng ngày. Thông thường, công việc của tôi xử lý từ 2 đến 3 triệu hàng và do đó hiệu suất thực sự tốt. Lên đến 10 triệu hàng, cả hai đều hoạt động tốt như nhau. Hầu hết những gì tôi nhận thấy là nút cổ chai hóa ra là thành phần đích hơn là các phép biến đổi. Bạn có thể khắc phục điều đó bằng cách có nhiều điểm đến. Đây là một ví dụ cho thấy việc triển khai nhiều điểm đến.
-
Ảnh chụp màn hình # 8 hiển thị số bản ghi trong cả ba bảng. Ảnh chụp màn hình # 9 hiển thị 6 bản ghi hàng đầu trong mỗi bảng.
Hy vọng điều đó sẽ hữu ích.
Tập lệnh SQL:
CREATE TABLE [dbo].[ItemAmount](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [nvarchar](30) NOT NULL,
[Price] [numeric](18, 2) NOT NULL,
[Discount] [numeric](18, 2) NOT NULL,
[CalculatedAmount] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_ItemAmount] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[ItemDiscountInfo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [nvarchar](30) NOT NULL,
[Discount] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_ItemDiscountInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[ItemPriceInfo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [nvarchar](30) NOT NULL,
[Price] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_ItemPriceInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
Ảnh chụp màn hình # 1:
Ảnh chụp màn hình # 2:
Ảnh chụp màn hình # 3:
Ảnh chụp màn hình # 4:
Ảnh chụp màn hình # 5:
Ảnh chụp màn hình # 6:
Ảnh chụp màn hình # 7:
Ảnh chụp màn hình # 8:
Ảnh chụp màn hình # 9: