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.