Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sự khác biệt giữa các phép chuyển đổi Kết hợp Tham gia và Tra cứu trong SSIS là gì?

Ả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 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 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.

  1. Tôi có ba bảng tên là dbo.ItemPriceInfo , dbo.ItemDiscountInfo 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.

  2. Các bảng dbo.ItemPriceInfo 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.

  3. 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 dbo.ItemDiscountInfo , tính tổng số tiền và lưu nó vào bảng dbo.ItemAmount .

  4. 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ất 05 phút 14 giây 719 mili giây để thực thi gói dựa trên chuyển đổi Merge Join.

  5. 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ất 11 phút 03 giây 610 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.

  6. Đ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.

  7. Ả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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi cột Ngày giờ từ UTC sang giờ địa phương trong câu lệnh chọn

  2. Triển khai tải gia tăng bằng cách sử dụng Thay đổi tính năng thu thập dữ liệu trong SQL Server

  3. Hiệu suất máy chủ SQL - Kiểm tra trong đám mây

  4. Tại sao chúng ta luôn thích sử dụng các tham số trong các câu lệnh SQL?

  5. Sử dụng DateTime trong SqlParameter cho thủ tục được lưu trữ, lỗi định dạng