Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa perbedaan antara transformasi Gabung Gabung dan Pencarian di SSIS?

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.

  1. Saya memiliki tiga tabel bernama dbo.ItemPriceInfo , dbo.ItemDiscountInfo dan dbo.ItemAmount . Buat skrip untuk tabel ini disediakan di bawah bagian skrip SQL.

  2. Tabeldbo.ItemPriceInfo dan dbo.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.

  3. Saya membuat dua paket SSIS untuk membandingkan kinerja transformasi Gabung Bergabung dan Pencarian. Kedua paket harus mengambil informasi dari tabel dbo.ItemPriceInfo dan dbo.ItemDiscountInfo , hitung jumlah totalnya dan simpan ke tabel dbo.ItemAmount .

  4. 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. Butuh 05 menit 14 detik 719 milidetik untuk mengeksekusi paket berbasis transformasi Gabung Bergabung.

  5. Paket kedua menggunakan Lookup transformasi dengan cache Penuh (yang merupakan pengaturan default). cuplikan layar #6 dan #7 menunjukkan contoh eksekusi paket dan durasi eksekusi. Butuh 11 menit 03 detik 610 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.

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat dan menanyakan server database tertaut di SQL Server?

  2. 3 Cara Mengembalikan Daftar Pekerjaan Agen SQL Server (T-SQL)

  3. Cara menggunakan UPDATE dari SELECT di SQL Server

  4. Pilih kolom dari kumpulan hasil prosedur tersimpan

  5. PILIH kueri dengan kondisi CASE dan SUM()