2016-11-15 2 views
-3

두 개의 큰 테이블 (각각 100-150k 행)이 있습니다.두 개의 큰 테이블 비교 (SQL Server)

이 표의 구조는 동일합니다. 엔티티의 ID도 각 테이블에서 동일합니다.

  1. 어떤 행의 필드가 다른 테이블의 행과 다른 :

    나는이 테이블을 비교하고 다음 질문에 대답 매우 빠른 방법이 필요합니다?
  2. 첫 번째 테이블에 어떤 ID가 있고 두 번째 테이블에 존재하지 않는 ID가 있습니까?
  3. 두 번째 테이블에있는 아이디 중 첫 번째 테이블에없는 아이디는 무엇입니까?

고맙습니다!

편집 : 내가

+1

아직 시도해 보셨나요? –

+0

작은 테이블과 비교하여 큰 테이블을 비교하는 데 차이가 있습니까? –

+5

150,000 행은 큰 테이블이 아닙니다! 10 억 개의 행이 큰 테이블입니다. –

답변

2

두 개의 테이블 Table1Table2이 그들이 동일한 구조 및 명명 된 기본 키가있는 경우 ID이 SQL 사용할 수 있습니다 : 당신이 비교 한 열에서 다른 행을 찾기 위해 노력하는 경우

--Find rows that exist in both Table1 and Table2 
SELECT * 
FROM Table1 
WHERE EXISTS (SELECT 0 FROM Table2 WHERE Table1.ID = Table2.ID) 

--Find rows that exist in Table1 but not Table2 
SELECT * 
FROM Table1 
WHERE NOT EXISTS (SELECT 0 FROM Table2 WHERE Table1.ID = Table2.ID) 

을 또는 다른, 그것은 조금 더 까다 롭습니다. 각 열을 직접 확인하기 위해 SQL을 작성할 수 있지만 두 테이블 모두에 임시 CHECKSUM 열을 추가하고 비교하는 것이 더 간단 할 수 있습니다. 체크섬이 다른 경우 하나 이상의 열이 다릅니다.

1

SQL Data Compare이 일을위한 훌륭한 도구입니다 (C#을하여 결과를 선택하기 위해 다음과) C# 또는 어쩌면 저장 프로 시저를 사용하여이 비교를 할 필요가있다. 또한 Microsoft Visual Studio SQL Server 데이터 도구에는 데이터 비교 기능이 있습니다.

0

대용량 데이터 세트를 비교할 때 다음과 같은 방법으로 매우 잘 수행됩니다.

http://weblogs.sqlteam.com/jeffs/archive/2004/11/10/2737.aspx

는 기본적으로 두 개의 데이터 소스 UNION ALL 후이를 응집 다른 테이블에서 동일한 일치하는 행이없는 행만을 반환한다.

With unionCTE As (
    Select 'TableA' As TableName, col1, col2 
     From TableA 
    Union All 
    Select 'TableB', col1, col2 
     From TableB) 
Select Max(TableName), col1, col2 
    From unionCTE 
    Group By col1, col2 
    Having Count(*) = 1 
    Order By col1, col2, TableName; 

이 하나의 결과 집합에 결과를 표시합니다, 같은 키하지만 서로 다른 값을 갖는 행이있을 경우 쉽게 사이에 변경되는 값을 비교할 수 있도록 행 위에 다른 하나가 될 것입니다 테이블들.

원하는 경우 저장 프로 시저에 쉽게 넣을 수 있습니다.