조인 필터

적용 대상:SQL Server

조인 필터를 사용하면 게시의 관련 테이블을 필터링하는 방법에 따라 테이블을 필터링할 수 있습니다. 일반적으로 부모 테이블은 매개 변수가 있는 필터를 사용하여 필터링됩니다. 그런 다음 하나 이상의 조인 필터가 테이블 간의 조인을 정의하는 것과 거의 동일한 방식으로 정의됩니다. 조인 필터는 관련 테이블의 데이터가 조인 필터 절과 일치하는 경우에만 복제되도록 매개 변수가 있는 필터를 확장합니다.

일반적으로 조인 필터는 조인 필터가 적용되는 테이블에 대해 정의된 기본 키/외래 키 관계를 따르지만 기본 키/외래 키 관계를 엄격하게 따르지는 않습니다. 조인 필터는 두 테이블의 관련 데이터를 비교하는 논리를 기반으로 할 수 있습니다.

기본 키를 통해 외래 키 관계와 관련된 Adventure Works 샘플 데이터베이스의 다음 테이블을 고려합니다.

  • HumanResources.Employee

  • Sales.SalesOrderHeader

  • Sales.SalesOrderDetail

이러한 테이블은 모바일 영업 사원을 지원하기 위해 애플리케이션에서 사용할 수 있지만 HumanResources.Employee 테이블의 각 영업 담당자가 고객의 주문과 관련된 데이터만 받도록 필터링해야 합니다.

첫 번째 단계는 부모 테이블에 매개 변수가 있는 필터를 정의하는 것입니다. 이 예제에서는 HumanResources.Employee 테이블입니다. 이 테이블의 LoginID열에는 각 직원에 대한 로그인이 domain\login형식으로 포함되어 있습니다. 각 직원이 자신에게 관련된 데이터만 받을 수 있도록 이 테이블을 필터링하려면 다음과 같은 매개 변수가 있는 필터 절을 지정합니다.

LoginID = SUSER_SNAME()  

이 필터를 사용하면 각 직원의 구독에 해당 직원과 관련된 HumanResources.Employee 테이블의 데이터만 포함됩니다(이 경우 단일 행). 자세한 내용은 매개 변수가 있는 행 필터를 참조하십시오.

다음 단계는 두 테이블 간에 조인을 지정하는 데 사용된 구문과 유사한 구문을 사용하여 이 필터를 각 관련 테이블로 확장하는 것입니다. 첫 번째 조인 필터 절은 다음과 같습니다.

Employee.EmployeeID = SalesOrderHeader.SalesPersonID  

이렇게 하면 구독에 각 영업 사원과 관련된 주문 데이터만 포함됩니다. 두 번째 조인 필터 절은 다음과 같습니다.

SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID  

이렇게 하면 구독에 각 영업 사원의 주문 데이터와 관련된 세부 데이터만 포함됩니다. 이 예에서는 각 지점에서 조인하는 단일 테이블을 보여 줍니다. 각 지점에 둘 이상의 테이블을 조인할 수도 있습니다.

조인 필터는 새 게시 마법사 및 게시 속성 대화 상자를 통해 한 번에 하나씩 추가하거나 프로그래밍 방식으로 추가할 수 있습니다. 새 게시 마법사를 통해 자동으로 생성될 수도 있습니다. 테이블에 대한 행 필터를 지정하면 조인 필터가 모든 관련 테이블에 적용됩니다. 자세한 내용은 병합 아티클 간에 조인 필터 정의 및 수정, 병합 아티클 간에 조인 필터 집합 자동 생성(SQL Server Management Studio) 및 아티클 정의를 참조하세요.

조인 필터 성능 최적화

다음 지침에 따라 조인 필터 성능을 최적화할 수 있습니다.

  • 조인 필터 계층 구조의 테이블 수를 제한합니다.

    조인 필터는 테이블을 무제한 포함할 수 있지만 테이블 수가 많은 필터는 병합 처리 중 성능에 상당한 영향을 줄 수 있습니다. 5개 이상의 테이블 조인 필터를 생성하는 경우 다른 해결 방법을 고려합니다. 작은 테이블이나 변경 대상이 아니거나 주로 조회 테이블인 테이블을 필터링하지 마세요. 구독 간에 분할해야 하는 테이블 사이에서만 조인 필터를 사용합니다.

  • 필요한 경우 join unique key 옵션을 True 로 설정합니다.

    병합 프로세스에는 부모에 조인된 열이 고유한 경우 사용할 수 있는 특별한 성능 최적화가 있습니다. 조인 조건이 고유한 열을 기반으로 하는 경우 조인 필터에 대한 조인 고유 키 옵션을 설정합니다. 이 옵션을 설정하는 방법에 대한 자세한 내용은 이전 섹션에 나열된 방법 항목을 참조하세요.

  • 조인 필터에서 참조된 열은 인덱싱되어야 합니다.

    필터에서 참조되는 열이 인덱싱되면 복제에서 필터를 보다 효율적으로 처리할 수 있습니다.

  • 조인 필터를 모방하는 행 필터를 만들지 마세요.

    다음과 같이 WHERE 절에서 하위 쿼리를 사용하여 조인 필터와 비슷하게 실행되는 행 필터를 만들 수 있습니다.

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

    이러한 모든 논리를 하위 쿼리가 아닌 조인 필터로 표현하는 것이 좋습니다. 애플리케이션에서 행 필터에 하위 쿼리를 사용해야 할 경우에는 하위 쿼리가 변경하지 않는 조회 데이터만 참조하도록 해야 합니다.

참고 항목

병합 복제의 게시된 데이터 필터링
매개 변수가 있는 행 필터