SQL Server 2008 의 희소 열 과 열 집합
4207 단어 SQL Server 2008
희소 열 에 대한 상세 한 소 개 는 참고 하 시기 바 랍 니 다 http://msdn.microsoft.com/zh-cn/library/cc280604.aspx
열 집 에 대한 상세 한 소 개 는 참고 하 시기 바 랍 니 다 http://msdn.microsoft.com/zh-cn/library/cc280521.aspx
나의 총 결 은 아래 와 같다.
1. 희소 열 은 주로 빈 필드 에 대한 더 좋 은 저장 체 제 를 제공 하기 위해 공간 을 절약 할 수 있 지만 (구체 적 으로 말 하면 빈 값 을 차지 하지 않 을 때 공간 을 차지 하지 않 는 다) 성능 에 도 영향 을 줄 수 있다.그 러 니 저울질 해 야 한다.
희소 열 은 주로 장면 을 사용한다. 한 실 체 는 많은 속성 열 이 있 지만 많은 속성 이 부족 할 수 있다.이것 은 이전에 우 리 는 속성 집합 문제 라 고 불 렀 다.
희소 열 은 데이터 형식 이 아니 라 열의 속성 일 뿐이다.
2. 열 집합 은 모든 희소 열 을 정의 할 수 있 는 집합 이다.이것 은 XML 데이터 형식 입 니 다.여러 개의 희소 열 에 열 집합 을 정의 한다 면 이 열 에 대한 수정 은 이 열 을 직접 수정 할 수도 있 고 한꺼번에 열 집합 필드 를 수정 해서 완성 할 수도 있다.열 집합 필드 는 사실 계산 필드 이다.
다음은 예 하 나 를 보 겠 습 니 다.
우선 희소 열 을 어떻게 사용 하 는 지 살 펴 보 자.여기 서 관건 은 정 의 를 내 릴 때 SPARSE 키 워드 를 사용 하 는 거 예요.
USE AdventureWorks
GO
CREATE TABLE DocumentStore
(DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,
ProductionSpecification varchar(20) SPARSE NULL, ProductionLocation smallint SPARSE NULL, MarketingSurveyGroup varchar(20) SPARSE NULL ) ;
GO
--
INSERT DocumentStore(DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
GO
INSERT DocumentStore(DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35')
GO
,
USE AdventureWorks;
GO
CREATE TABLE DocumentStoreWithColumnSet
(DocID int PRIMARY KEY,
Title varchar(200) NOT NULL,
ProductionSpecification varchar(20) SPARSE NULL, ProductionLocation smallint SPARSE NULL, MarketingSurveyGroup varchar(20) SPARSE NULL, MarketingProgramID int SPARSE NULL, SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS);-- ALL_SPARSE_COLUMNS ,
GO
-- , ,
INSERT DocumentStoreWithColumnSet (DocID, Title, ProductionSpecification, ProductionLocation)
VALUES (1, 'Tire Spec 1', 'AXZZ217', 27)
GO
INSERT DocumentStoreWithColumnSet (DocID, Title, MarketingSurveyGroup)
VALUES (2, 'Survey 2142', 'Men 25 - 35')
GO
INSERT DocumentStoreWithColumnSet (DocID, Title, SpecialPurposeColumns)
VALUES (3, 'Tire Spec 2', '<ProductionSpecification>AXW9R411</ProductionSpecification><ProductionLocation>38</ProductionLocation>')
GO
, SELECT * , ,
, ,
SELECT DocID, Title, ProductionSpecification, ProductionLocation
FROM DocumentStoreWithColumnSet
WHERE ProductionSpecification IS NOT NULL ;
업데이트 에 대해 서 는 삽입 과 마찬가지 로 두 가지 방식 이 모두 가능 하고 효과 가 같 습 니 다.