XML 데이터 유형을 사용하는 경우


12

프로젝트에서 데이터베이스를 생성 할 책임이 있습니다. 값이 거의없는 필드 (10,000 레코드마다 1 개)가 있으며 필드를 데이터베이스에 저장하는 가장 좋은 방법을 찾으려고합니다.

내가 볼 수있는 한 세 가지 옵션이 있습니다.

  1. 각 추가 값에 대해 테이블에 열 추가
  2. 원래 테이블을 참조하고 값을 저장해야 할 위치에만 레코드가있는 연결된 테이블을 추가하십시오.
  3. 원래 테이블에서 XML 데이터 유형을 사용하고 여기에 모든 값을 저장하십시오.

내가 고려하지 않은 다른 옵션이 있습니까?

각 방법의 장단점을 해결하려고합니다. 내가 알 수있는 한 1은 가장 쉽고 2는 가장 적은 공간을 차지하지만 3에 대한 많은 리소스를 찾는 데 어려움을 겪고 있습니다.


1
데이터베이스에서 xml 남용에 대한 개인적인 불만을 추가하려면 제목의 질문에 직접 대답하고 큰 뚱뚱한 말을하십시오. 질문의 실제 본문에 대해서는 이미 훌륭한 답변이 있기 때문에 동료가 도와 줄 것입니다 :-). 추신 : 당신은 실제로 내 첫 문장을 무시할 수 있습니다.
Marian

몇 개의 추가 필드에 대해 이야기하고 있습니까? 그리고 그들은 같은 개체의 일부가되는 것이 합리적입니까?
Andrew Bickerton

답변:


12

당신이 필요 같은 사운드 스파 스 열필터링 된 인덱스 및 옵션 1. 이동이 완전히 정확이 시나리오의 기능을 지원하고 설명되어 있습니다.

SQL Server 데이터베이스 엔진은 열 정의에서 SPARSE 키워드를 사용하여 해당 열의 값 저장을 최적화합니다. 따라서 테이블의 행에 대해 열 값이 NULL이면 값이 스토리지를 필요로하지 않습니다.

이 시나리오에서 XML 솔루션이 제대로 작동한다고 상상할 수 없습니다. 중복 메타 데이터에 엄청난 오버 헤드가 발생하고 쿼리 속도가 느려질 것입니다.


1
스파 스 열이 내가 따르는 것 같아요. 매우 적은 양의 데이터가 특정 테이블의 소수의 열에 저장 될 것으로 예상합니다.
Matthew Steeples

나는이 권리를 읽고 있는지 확실하지 않지만,이 링크에 따르면 스파 스 열은 기본적으로 내가보고있는 것에 대한 데이터베이스 구현입니다. 그렇지 않습니까? blog.sqlauthority.com/2008/07/14/…
Matthew Steeples

그것이 내부적으로 그렇게 구현되어 있다면 (그리고 그것이 누군가의 블로그 일뿐이라는 것을 알지 못한다면) XML을 직접 처리하거나 파싱 할 필요가 없습니다. 데이터 형식)
Gaius

5
  1. SQL Server에서 가변 길이 인 경우 널 입력 가능 열은 공간을 차지 하지 않습니다 . NULL이라는 사실은 NULL 비트 맵에 저장됩니다 . 필터링 된 인덱스로 필요한 경우 인덱스를 생성 하여 NULL 열을 무시할 수 있습니다.

  2. 포인트 1을 고려할 때 복잡성을 추가합니다.

  3. 하지마 검색 할 하드, 구문 분석 등 : 당신은 것입니다 나중에 후회

그것은 또한 크기에 달려 있습니다 : 이것은 수십억 행 동안 char (1000)입니까? 아니면 100k 행에 대해 tinyint? 후자가 포인트 2의 추가 복잡성을 고려한다면 가치가 없습니다.


널인 널 입력 가능 컬럼에 공간이 없다는 참조가 있습니까? null인지 여부는 null 비트 맵에 저장되었지만 고정 길이 필드에 대해 데이터가 여전히 테이블에 저장되어 있다고 생각했습니다. 이 값의 대부분에 사용할 데이터 유형은 돈입니다 (따라서 8 바이트)
Matthew Steeples

1
@Matthew Steeples : 가변 길이는 이미 공간을 차지하지 않는다고 말했습니다. 그리고 참조 sqlskills.com/BLOGS/PAUL/category/On-Disk-Structures.aspx#p41 이 8 바이트의 행은 어떻게 될 수 있습니까?
gbn

현재 우리는 50 만 행에 있지만 제대로 살면 주당 약 1 백만의 비율로 (희망적으로) 확장 될 것입니다.
Matthew Steeples

3

SQL Server 2008을 사용하면 언급 한 상황에 맞게 특별히 설계된 스파 스 열을 사용하는 추가 옵션이 있습니다.

XML COLUMN_SET을 사용하여 결합 된 XML 객체로 보거나 개별적으로 참조 할 수있어 공간을 크게 절약 할 수 있다는 추가 이점이 있습니다.

자세한 내용은 다음 블로그 기사를 확인하십시오. http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx


-4

네 번째 옵션 : 테이블을 사용하지 마십시오. 테이블은 이러한 종류의 데이터 (실제로 테이블 형식으로 강제 적용되지 않은 모든 종류의 데이터)에 매우 적합하지 않습니다. XML 만 사용하십시오.


3
-1 "테이블을 사용하지 않음"이 옵션 인 것은 사실이지만 대답은 테이블 구조에 대해 명확하게 rant를 나타내며 실제로 유용한 답변을 제출하지는 않습니다.
Andrew Bickerton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.