2011-11-04 3 views
2

테이블에 3 백만 개가 넘는 행이 있습니다. 사용자가이 테이블을 삽입하거나 업데이트하려고하면 다음 조건을 순차적으로 확인해야합니다. (비즈니스 필요)SQL Server 2008의 일치 알고리즘

  1. 행 중 동일한 주소가 있습니까?
  2. 행에 동일한 우편 번호가 있습니까?
  3. 행에 동일한 DOB가 있습니까?

분명히 새로 삽입되거나 업데이트 된 행은이 테이블의 많은 레코드와 일치합니다.

비즈니스 요구 사항은 첫 번째 일치 항목 (행)이 발견되어 해당 행이 반환되어야하는 경우 일치 프로세스가 종료되어야한다는 것입니다.

간단한 "SELECT"쿼리를 사용하여이 작업을 쉽게 수행 할 수 있습니다. 그러나 경기를 찾는 데는 매우 오랜 시간이 걸립니다.

효율적인 방법을 제안하십시오.

+2

UNIQUE 제약 조건과 적절한 예외 처리? –

+0

이 필드에서 테이블의 색인을 생성 했습니까? – MrTheWalrus

+0

빨리 선택하려면 각 필드 (주소, 우편 번호, 의사 (DOB))의 색인을 생성해야합니다. 그렇지 않으면 각 필드에 대해 전체 테이블 검색이 수행됩니다. –

답변

0

첫 번째 경기가 끝난 후 돌아 오는 길을 찾고 있다면 LIMIT 1을 사용하십시오.

생년월일이나 우편 번호 테이블을 유지하고 각 행을 사용자에게 연결하여 고객을 더 작은 세트로 쉽게 필터링 할 수 있습니다. 그것은 당신이 데이터베이스에서 훨씬 더 빠른 검색을 수행 할 수있게합니다.

예 : 대상 날짜가 1980년 1월 1일 경우 그 시나리오에서

dob  | userID 
1/1/1980 | 235 
1/1/1980 | 482 
1/1/1980 | 123 
2/1/1980 | 521 

, 당신은 큰 사용자 테이블에서 3 개 행을 읽을 수 있습니다. 그것은 기본 키 인덱스를 통해서도 가능하므로 정말 빠릅니다.

+0

SQL Server에 LIMIT 절이 없습니다! –

+0

정말요? 그거 끔찍해. 행을 얻을 때까지'WHERE id> = 0 AND id <10000','WHERE id> = 10000 AND id <20000' 등과 같은 것을 제한 할 수 있다고 가정합니다. 어쨌든, 내 제안의 나머지 부분은 여전히 ​​의미합니다. – Polynomial

+0

그것은 정말로 빨아 먹는다! ROW_NUMBER() 함수를 사용하여 기능을 에뮬레이트 할 수 있습니다. –