sourcecode

SPARS COLUMN을 사용해야 하는 이유와 시기(SQL SERVER 2008)

codebag 2023. 7. 12. 23:45
반응형

SPARS COLUMN을 사용해야 하는 이유와 시기(SQL SERVER 2008)

SQL Server 2008의 새로운 기능 "Sparse COLUMN"에 대한 튜토리얼을 검토한 결과 열 값이 0 또는 NULL이면 공간이 필요하지 않지만 값이 있으면 일반(비 스파스) 열이 보유한 공간의 4배가 필요합니다.

제가 이해한 것이 맞다면 데이터베이스 설계 시점에 왜 그렇게 해야 합니까?만약 제가 그것을 사용한다면, 저는 어떤 상황에 처하게 될까요?

또한 호기심에서 열을 희소 열로 정의할 때 공간이 예약되지 않는 방법도 있습니다(즉, 이를 위한 내부 구현은 무엇입니까?).

희소 열은 값을 저장하는 데 4배의 공간을 사용하지 않고 null이 아닌 값당 (고정된) 4바이트를 추가로 사용합니다.(이미 언급했듯이 NULL은 0개의 공백을 사용합니다.)

  • 따라서 비트 열에 저장된 비트가 아닌 값은 1비트 + 4바이트 = 4.125바이트입니다.그러나 이 중 99%가 NULL인 경우에도 순절약 효과가 있습니다.

  • GUID(UniqueIdentifier) 열에 저장된 값은 16바이트 + 4바이트 = 20바이트입니다.따라서 이 중 50%만 NULL일 경우에도 순 절감 효과가 있습니다.

따라서 "예상 절감액"은 어떤 열에 대해 이야기하고 있는지와 어떤 비율이 null 대 non-null이 될 것인지에 따라 크게 달라집니다.변수 너비 열(바깥쪽 막대)은 정확하게 예측하기가 조금 더 어려울 수 있습니다.

서적 온라인 페이지에는 다양한 데이터 유형 중 몇 퍼센트가 null이어야 혜택을 받을 수 있는지를 보여주는 표가 있습니다.

그렇다면 희소 열은 언제 사용해야 할까요?행의 상당한 비율이 NULL 값을 가질 것으로 예상되는 경우.생각나는 몇 가지 예:

  • 주문 표의 "주문 반환 날짜" 열.당신은 매출의 아주 적은 비율이 반품으로 이어지기를 바랄 것입니다.
  • 주소 테이블의 "4번째 주소" 행.부서 이름과 "관리"가 필요한 경우에도 대부분의 우편 주소는 4개의 별도 행이 필요하지 않습니다.
  • 고객 테이블의 "서픽스" 열.꽤 낮은 비율의 사람들은 이름 뒤에 "Jr.", "III" 또는 "Esquire"를 가지고 있습니다.
  • 희소 열에 null을 저장하면 공간이 전혀 사용되지 않습니다.

  • 모든 외부 응용 프로그램에서 열은 동일하게 작동합니다.

  • 스파스 열은 열에 비어 있지 않은 속성을 처리하기 위한 인덱스만 생성하기 때문에 필터링된 인덱스와 매우 잘 작동합니다.

  • 스퍼스 열 위에 집합이 포함된 열에서 null이 아닌 모든 데이터의 xml 클립을 반환하는 열 집합을 생성할 수 있습니다.열 집합은 열 자체처럼 작동합니다.참고: 테이블당 하나의 열 집합만 가질 수 있습니다.

  • 데이터 캡처 및 트랜잭션 복제 변경은 모두 작동하지만 열 집합 기능은 작동하지 않습니다.

다운사이드

  • 희소 열에 데이터가 있는 경우 일반 열보다 4바이트가 더 소요됩니다. 예를 들어 비트(보통 0.125바이트)도 4.125바이트이고 고유 식별자가 16바이트에서 20바이트로 상승합니다.

  • 일부 데이터 유형은 희소할 수 없습니다. 텍스트, ntext, 이미지, 타임스탬프, 사용자 정의 데이터 유형, 지오메트리 또는 FILESTREAM 특성이 있는 Varbinray(최대)는 희소할 수 없습니다.(2009년 5월 17일 변경, 오타를 발견한 Alex에게 감사)

  • 계산된 열은 희소할 수 없습니다(희소 열은 다른 계산된 열의 계산에 참여할 수 있지만).

  • 규칙을 적용하거나 기본값을 설정할 수 없습니다.

  • 희소 열은 클러스터된 인덱스의 일부를 형성할 수 없습니다.이 작업을 수행해야 하는 경우 스파스 열을 기반으로 계산된 열을 사용하고 해당 열에 클러스터된 인덱스를 생성합니다(이 경우 개체가 실패함).

  • 병합 복제가 작동하지 않습니다.

  • 데이터 압축이 작동하지 않습니다.

  • 희소 열에 대한 액세스(읽기 및 쓰기)는 더 비싸지만, 이에 대한 정확한 수치를 찾을 수 없습니다.

언급

당신은 그것을 잘못 읽고 있습니다 - 그것은 결코 4배의 공간을 차지하지 않습니다.

구체적으로 4x(4 곱하기 4)가 아닌 4*(4바이트, 각주 참조)로 표시됩니다.공간이 정확히 4배인 유일한 경우는 문자(4)입니다. NULL이 64% 이상 존재할 경우 절약됩니다.

"*이 길이는 유형에 포함된 데이터의 평균에 2바이트 또는 4바이트를 더한 길이와 같습니다."

| datetime NULL      | datetime SPARSE NULL | datetime SPARSE NULL |
|--------------------|----------------------|----------------------|
| 20171213 (8 bytes) | 20171213 (12 bytes)  | 20171213 (12 bytes)  |
| NULL     (8 bytes) | 20171213 (12 bytes)  | 20171213 (12 bytes)  |
| 20171213 (8 bytes) | NULL      (0 bytes)  | NULL      (0 bytes)  |
| NULL     (8 bytes) | NULL      (0 bytes)  | NULL      (0 bytes)  |

행당 한 번만 손실되는 것이 아니라 행의 모든 셀에서 null이 아닌 4바이트가 손실됩니다.

SQL SERVER – 2008 SPARS Column 소개Part 2 by Pinal Dave:

모든 SPARS 열은 데이터베이스에 하나의 XML 열로 저장됩니다.SPARS 열의 장점과 단점을 살펴보겠습니다.

SPARS 열의 장점은 다음과 같습니다.

  • INSERT, UPDATE 및 DELETE 문은 이름으로 스파스 열을 참조할 수 있으며, 스파스 열은 하나의 XML 열로도 작동할 수 있습니다.

  • SPARS 열은 데이터가 행에 채워지는 필터링된 인덱스를 활용할 수 있습니다.

  • SPARS 열은 데이터베이스에 0 또는 null 값이 있을 때 많은 데이터베이스 공간을 절약합니다.

SPARS 열의 단점은 다음과 같습니다.

  • SPARS 열에 IDENTITY 또는 ROWGUIDCOL 속성이 없습니다.

  • 텍스트, ntext, 이미지, 타임스탬프, 지오메트리, 지리 또는 사용자 정의 데이터 유형에는 SPARS 열을 적용할 수 없습니다.

  • SPARS 열에는 기본값이나 규칙 또는 계산된 열을 사용할 수 없습니다.

  • 클러스터된 인덱스 또는 고유한 기본 키 인덱스를 SPARS 열에 적용할 수 없습니다. SPARS 열은 클러스터된 인덱스 키의 일부가 될 수 없습니다.

  • SPARS 열을 포함하는 테이블의 최대 크기는 일반 8060바이트가 아닌 8018바이트일 수 있습니다.SPARS 열을 포함하는 테이블 작업은 일반 열에 대한 성능 적중을 수행합니다.

언급URL : https://stackoverflow.com/questions/1398453/why-when-should-i-use-sparse-column-sql-server-2008

반응형