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
'sourcecode' 카테고리의 다른 글
플라스크 - 잘못된 요청 브라우저(또는 프록시)가 이 서버가 이해할 수 없는 요청을 보냈습니다. (0) | 2023.07.12 |
---|---|
ansysql INSERT INTO 생성 (0) | 2023.07.12 |
Firebase child_added only get child added (0) | 2023.07.12 |
Firebase 실시간 데이터베이스에 대한 무단 액세스를 방지하려면 어떻게 해야 합니까? (0) | 2023.07.12 |
SQL에서 해당 달의 마지막 날 가져오기 (0) | 2023.07.12 |