2012-07-24 2 views
2

동일한 구조이지만 내용이 다른 세 개의 테이블을 만들거나 데이터를 모두 포함하는 하나의 테이블과 데이터를 구별하는 추가 열을 만들 수 있습니다. 각 테이블에는 약 10,000 개의 행이 있으며 데이터를 찾는 데 독점적으로 사용됩니다. 핵심 설계 기준은 검색 속도입니다. 따라서 더 빠릅니다 : 각각 10K 행 3 개의 테이블 또는 30K 행 1 개의 테이블 또는 실제로 차이가 있습니까? 참고 : 쿼리 매개 변수로 사용될 모든 열에는 인덱스가 있습니다.3 개의 SQL 테이블 또는 하나?

+1

더 많은 정보가 유용 할 수 있지만 세 가지 유형의 데이터가있는 경우 나에게 소리가 들리면 세 가지 다른 표가 나타납니다. – Marvo

+0

세 데이터 소스의 모든 열이 동일합니다. –

+0

* PARTITIONING *은 DB에서 지원하는 유용한 개념 (예 : Postgres)을 제공합니다. 이런 소리가 당신 상황 일 수 있습니다. –

답변

3

현대적인 RDBMS에서는 조회 시간면에서 10k 또는 30k 행간에 큰 차이가 없어야합니다. 어떤 경우에는 정규화를 보증하기에 충분하지 않은 차이가 있습니다. 인덱싱 된 한정자 열은 이러한 디자인에 대한 일반적인 접근 방식입니다.

업데이트 패턴이 "짧은"표 (예 : 소셜 네트워크의 오늘 메시지)에 넣을 수있는 제한된 데이터 세트에 영향을주는 경우에만 역 정규화를 고려할 수 있습니다. 삽입/업데이트 및 안정화 된 업데이트를 대형 인덱스 테이블로 전송하는 백그라운드 프로세스가 있습니다. 이 사건은 당신이 실제로 작전을하는 동안 을 얻는 것이 었습니다. 매우 특별하고 불행한 요구 사항이 있지만,은 극적 일 것입니다. RDBMS 엔진은 대부분의 간단한 시나리오를 매우 효율적으로 처리 할만큼 정교합니다. 30k 또는 행이 후보자로 들리지 않습니다.

여전히 의심스러운 경우 특정 데이터베이스/시스템 설정을 확인하는 테스트를 작성하는 것은 매우 쉽습니다. 실제 데이터로 여기에 결과를 게시하면 모든 단계에서 유용한 정보가 될 것입니다.

+0

테이블은 분기마다 완전히 재생성되며 앞으로 읽기 전용으로 처리되므로 쿼리 속도에만 관심이 있습니다. 업데이트는 문제가 아닙니다. –

+0

표는 아직 존재하지 않지만 일단 표를 작성하면 제안대로 몇 가지 테스트를 실행하고 결과를 게시합니다. –

1

다른 포스터가 적용하고 동의 한 속도 문제 이외에도 솔루션의 유지 관리 비용에 영향을 줄 수 있으므로 데이터베이스에서 복제하는 비즈니스 모델을 고려해야합니다.

'3 가지'가 4로 변할 수 있고 별도의 테이블 경로를 선택한 경우 다른 테이블을 추가해야합니다. 반면에 discriminator 경로를 선택하면 새로운 discriminator를 사용하는 것처럼 간단합니다.

그러나 discriminator 경로를 선택하면 'things'중 하나에 저장할 데이터가 더 있어야한다는 새로운 요구 사항이 생기면 테이블에 다른 항목과 관련이없는 추가 열을 추가해야합니다 '.

귀하의 비즈니스 모델을 알기 때문에 어느 것이 올바른 방향인지 말할 수 없습니다.