Tangkapan layar #1 menunjukkan beberapa poin untuk membedakan antara Merge Join transformation
dan Lookup transformation
.
Mengenai Pencarian:
Jika Anda ingin menemukan baris yang cocok di sumber 2 berdasarkan input sumber 1 dan jika Anda tahu hanya akan ada satu kecocokan untuk setiap baris input, maka saya sarankan untuk menggunakan operasi Pencarian. Contohnya adalah Anda OrderDetails
tabel dan Anda ingin menemukan Order Id
. yang cocok dan Customer Number
, maka Pencarian adalah opsi yang lebih baik.
Mengenai Gabung Gabung:
Jika Anda ingin melakukan penggabungan seperti mengambil semua Alamat (Rumah, Kantor, Lainnya) dari Address
tabel untuk Pelanggan tertentu di Customer
tabel, maka Anda harus menggunakan Merge Join karena pelanggan dapat memiliki 1 atau lebih alamat yang terkait dengannya.
Contoh untuk membandingkan:
Berikut adalah skenario untuk menunjukkan perbedaan kinerja antara Merge Join
dan Lookup
. Data yang digunakan di sini adalah gabungan satu lawan satu, yang merupakan satu-satunya skenario yang umum di antara mereka untuk dibandingkan.
-
Saya memiliki tiga tabel bernama
dbo.ItemPriceInfo
,dbo.ItemDiscountInfo
dandbo.ItemAmount
. Buat skrip untuk tabel ini disediakan di bawah bagian skrip SQL. -
Tabel
dbo.ItemPriceInfo
dandbo.ItemDiscountInfo
keduanya memiliki 13.349.729 baris. Kedua tabel memiliki ItemNumber sebagai kolom umum. ItemPriceInfo memiliki informasi Harga dan ItemDiscountInfo memiliki informasi diskon. Tangkapan layar #2 menunjukkan jumlah baris di masing-masing tabel ini. Tangkapan layar #3 menunjukkan 6 baris teratas untuk memberikan gambaran tentang data yang ada dalam tabel. -
Saya membuat dua paket SSIS untuk membandingkan kinerja transformasi Gabung Bergabung dan Pencarian. Kedua paket harus mengambil informasi dari tabel
dbo.ItemPriceInfo
dandbo.ItemDiscountInfo
, hitung jumlah totalnya dan simpan ke tabeldbo.ItemAmount
. -
Paket pertama menggunakan
Merge Join
transformasi dan di dalamnya digunakan INNER JOIN untuk menggabungkan data. Tangkapan layar #4 dan #5 menunjukkan contoh eksekusi paket dan durasi eksekusi. Butuh05
menit14
detik719
milidetik untuk mengeksekusi paket berbasis transformasi Gabung Bergabung. -
Paket kedua menggunakan
Lookup
transformasi dengan cache Penuh (yang merupakan pengaturan default). cuplikan layar #6 dan #7 menunjukkan contoh eksekusi paket dan durasi eksekusi. Butuh11
menit03
detik610
milidetik untuk menjalankan paket berbasis transformasi Lookup. Anda mungkin menemukan pesan peringatan Informasi:The buffer manager has allocated nnnnn bytes, even though the memory pressure has been detected and repeated attempts to swap buffers have failed.
Berikut adalah tautan yang berbicara tentang cara menghitung ukuran cache pencarian. Selama eksekusi paket ini, meskipun tugas aliran Data selesai lebih cepat, pembersihan Pipeline membutuhkan banyak waktu. -
Ini tidak berarti Transformasi pencarian buruk. Hanya saja, penggunaannya harus bijak. Saya cukup sering menggunakannya dalam proyek saya tetapi sekali lagi saya tidak berurusan dengan 10+ juta baris untuk pencarian setiap hari. Biasanya, pekerjaan saya menangani antara 2 dan 3 juta baris dan untuk itu kinerjanya sangat bagus. Hingga 10 juta baris, keduanya tampil sama baiknya. Sebagian besar waktu yang saya perhatikan adalah bahwa kemacetan ternyata menjadi komponen tujuan daripada transformasi. Anda bisa mengatasinya dengan memiliki banyak destinasi. Di sini adalah contoh yang menunjukkan penerapan beberapa tujuan.
-
Tangkapan layar #8 menunjukkan jumlah record di ketiga tabel. Tangkapan layar #9 menunjukkan 6 catatan teratas di setiap tabel.
Semoga membantu.
Skrip 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
Tangkapan Layar #1:
Tangkapan Layar #2:
Tangkapan Layar #3:
Tangkapan layar #4:
Tangkapan layar #5:
Tangkapan layar #6:
Tangkapan layar #7:
Tangkapan layar #8:
Tangkapan layar #9: