안녕하세요. 아래와 같이 동일한 데이터를 10만건씩 넣은 testtbl1, testtbl2를 생성후
아래와 같이 인덱스를 구성하였습니다.
pk_testtbl1, pk_non_testtbl2 사이즈는 클러스터인덱스와 넌클러스터 인덱스의 차이로 인해
리프레벨에 데이터 페이지이기 때문에 클러스터 인덱스로 구성한 인덱스의 사이즈가 큰것으로 보입니다.
testtbl1의 클러스터 인덱스(pk)로 구성한 인덱스 사이즈와 컬럼순서만 변경 후 생성한 넌클러스터 인덱스의
경우 사이즈가 차이가 약 10mb정도 나는데요. 어떤 이유때문인지 문의 드립니다.
넌클러스터인덱스로 구성시 클러스터 인덱스를 참조하는 부분으로 인해서 사이즈가 차이가 있는걸까요?
pk_testtbl1 31624
idx_testtbl1_001 21088
==============================================================================================================
환경 : MSSQL Server 2008R2 SE
--테이블 생성 (testtbl1, testtbl2)
CREATE TABLE TESTTBL1
(
num char(100) not null
,f_num char(100) not null
,x_num char(100) not null
)
--인덱스 구성
alter table testtbl1 add constraint pk_testtbl1 primary key(num, f_num)
create index idx_testtbl1_001 on testtbl1 (f_num, num)
create index idx_testtbl1_002 on testtbl1 (x_num)
alter table testtbl2 add constraint pk_non_testtbl2 primary key nonclustered (num, f_num)
create index idx_testtbl2_001 on testtbl2 (f_num, num)
create index idx_testtbl2_002 on testtbl2 (x_num)
--인덱스 사이즈 확인.
IndexName IndexSizeKB
----------------------------------------- --------------------
pk_testtbl1 31624
idx_testtbl1_001 21088
idx_testtbl1_002 32016
pk_non_testtbl2 21640
idx_testtbl2_001 21656
idx_testtbl2_002 11288
Comment 3
-
무념
2014.08.07 09:14
-
향지
2014.08.07 12:06
pk_testtbl1
idx_testtbl1_001
위 구조는 넌클러스터드의 컬럼이 다 클러스터드 인덱스 컬럼입니다.
넌클러스터드 컬럼 자체로 클러스터드로 찾아갈 수 있습니다.
클러스터드 인덱스가 있는 테이블에 넌클러스터드 인덱스를 생성할때
내부적으로 구조가 어떻게 되나도 한번 공부해보시면 될 것 같습니다.
pk_testtbl1 => num, f_num, x_num 있고
idx_testtbl1_001=> f_num, num 이 들어 있습니다.
용량도 대충 100byte * 10만 정도 차이납니다.
-
JKMoon
2014.08.08 11:43
dbcc ind, dbcc page 를 통해, 각각의 page에 포함된 데이터정보를 확인 하였습니다.
도움주셔서 감사합니다.
굳이 char로 선언한 이유가 있나요?
100byte를 고정으로 써야한다면 ........
고정, 가변, 키값 데이터 타입 .. 세가지만 생각해도 어딘가 이상한 ㅜㅜ