Bagikan melalui


Filter Gabungan

Berlaku untuk: SQL Server

Filter gabungan memungkinkan tabel difilter berdasarkan bagaimana tabel terkait dalam publikasi difilter. Biasanya tabel induk difilter menggunakan filter berparameter; kemudian satu atau beberapa filter gabungan didefinisikan dengan cara yang sama seperti Anda menentukan gabungan di antara tabel. Filter gabungan memperluas filter berparameter sehingga data dalam tabel terkait hanya direplikasi jika cocok dengan klausa filter gabungan.

Filter gabungan biasanya mengikuti hubungan kunci primer/kunci asing yang ditentukan untuk tabel tempat filter tersebut diterapkan, tetapi tidak terbatas pada hubungan kunci primer/kunci asing. Filter gabungan dapat didasarkan pada logika apa pun yang membandingkan data terkait dalam dua tabel.

Pertimbangkan tabel berikut dalam database sampel Adventure Works, yang terkait melalui kunci primer ke hubungan kunci asing:

  • HumanResources.Employee

  • Sales.SalesOrderHeader

  • Sales.SalesOrderDetail

Tabel ini dapat digunakan dalam aplikasi untuk mendukung tenaga penjualan seluler, tetapi harus difilter sehingga setiap orang penjualan di tabel HumanResources.Employee hanya menerima data yang relevan dengan pesanan pelanggan mereka.

Langkah pertama adalah menentukan filter berparameter pada tabel induk, yang dalam contoh ini adalah tabel HumanResources.Employee . Tabel ini mencakup kolom LoginID, yang berisi login untuk setiap karyawan dalam domain formulir \login. Untuk memfilter tabel ini sehingga setiap karyawan hanya menerima data yang terkait dengannya, tentukan klausul filter berparameter dari:

LoginID = SUSER_SNAME()  

Filter ini memastikan bahwa langganan setiap karyawan hanya berisi data dari tabel HumanResources.Employee yang relevan dengan karyawan tersebut (yang dalam hal ini adalah satu baris). Untuk informasi selengkapnya, lihat Filter Baris Berparameter.

Langkah selanjutnya adalah memperluas filter ini ke setiap tabel terkait, menggunakan sintaks yang mirip dengan yang digunakan untuk menentukan gabungan di antara dua tabel. Klausa filter gabungan pertama adalah:

Employee.EmployeeID = SalesOrderHeader.SalesPersonID  

Ini memastikan langganan hanya berisi data pesanan yang relevan dengan setiap orang penjualan. Klausa filter gabungan kedua adalah:

SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID  

Ini memastikan langganan hanya berisi data detail yang terkait dengan data pesanan untuk setiap orang penjualan. Contoh ini memperlihatkan satu tabel yang digabungkan di setiap titik; Dimungkinkan juga untuk menggabungkan lebih dari satu tabel di setiap titik.

Filter gabungan dapat ditambahkan satu per satu melalui Panduan Publikasi Baru dan kotak dialog Properti Publikasi, atau dapat ditambahkan secara terprogram. Mereka juga dapat dibuat secara otomatis melalui Wizard Publikasi Baru: Anda menentukan filter baris untuk tabel dan filter gabungan diterapkan ke semua tabel terkait. Untuk informasi selengkapnya, lihat Menentukan dan Memodifikasi Filter Gabungan Antara Artikel Penggabungan, Secara Otomatis Membuat Sekumpulan Filter Gabungan Antara Artikel Gabungan (SQL Server Management Studio), dan Tentukan Artikel.

Mengoptimalkan Performa Filter Gabungan

Performa filter gabungan dapat dioptimalkan dengan mengikuti panduan berikut:

  • Batasi jumlah tabel dalam hierarki filter gabungan.

    Filter Gabungan dapat melibatkan jumlah tabel yang tidak terbatas, tetapi filter dengan sejumlah besar tabel dapat berdampak signifikan pada performa selama pemrosesan penggabungan. Jika Anda membuat filter gabungan dari lima tabel atau lebih, pertimbangkan solusi lain: jangan memfilter tabel yang kecil, tidak dapat berubah, atau terutama tabel pencarian. Gunakan filter gabungan hanya di antara tabel yang harus dipartisi di antara langganan.

  • Atur opsi gabungkan kunci unik ke True jika sesuai.

    Proses penggabungan memiliki pengoptimalan performa khusus yang tersedia jika kolom yang digabungkan di induk bersifat unik. Jika kondisi gabungan didasarkan pada kolom unik, atur opsi gabungkan kunci unik untuk filter gabungan. Untuk informasi tentang pengaturan opsi ini, lihat topik cara penggunaan yang tercantum di bagian sebelumnya.

  • Pastikan bahwa kolom yang direferensikan dalam filter gabungan diindeks.

    Jika kolom yang direferensikan dalam filter diindeks, replikasi dapat memproses filter dengan lebih efisien.

  • Jangan membuat filter baris yang meniluki filter gabungan.

    Dimungkinkan untuk membuat filter baris yang menipu filter gabungan dengan menggunakan subkueri dalam klausa WHERE, seperti:

    WHERE Customer.SalesPersonID IN (SELECT EmployeeID FROM Employee WHERE LoginID = SUSER_SNAME())   
    

    Sangat disarankan agar semua logika tersebut diekspresikan dalam filter gabungan daripada subkueri. Jika aplikasi Anda memerlukan filter baris untuk menggunakan subkueri, pastikan subkueri hanya mereferensikan data pencarian yang tidak berubah.

Lihat Juga

Filter Data yang Diterbitkan untuk Replikasi Penggabungan
Filter Baris Berparameter