안녕하세요. 주디아줌마입니다^^

CLUSTERED INDEX KEY값이 유니크하지 않을때 UNIQUIFIER컬럼 정보가 생성됩니다.
클러스터드 인덱스 값을 변경할때 UNIQUIFIER값도 변할까요 안 변할까요? (이거 올려두고 혼나는거 아냐? ㅠㅠ) 당연한 것을? 
인덱스 재작성시 해당 UNIQUIFIER Key(KeyHashValue) 값도 변할까요?
 

-- ===================================================================

-- CLUSTERED INDEX의 값이 변경될때~ NONCLUSTERED INDEX의 UNIQUIER 값이 변경 되느냐?

-- Update : 주디아줌마

-- Update Date : 2011.08.02

-- Desc : 

--

--

-- ===================================================================



use master

go


SET NOCOUNT ON;

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

GO


drop database indextest

go


-- TSQL Script

create database indextest

go

 

 

use indextest

go

 

 

-- create the index after loading the data

drop table t_ci

go

 

create table t_ci (c1 int, c2 char (100), c3 int, c4 varchar(1000))

go

 

 

-- load the data

declare @i int

select @i = 0

while (@i < 1000)

begin

insert into t_ci values (@i, 'hello', @i+10000, replicate ('a', 100))

set @i = @i + 1

end


-- create the clustered index

create clustered index ci on t_ci(c1)

go


-- nonclustered index

create index ni on t_ci(c3)

go


DBCC SHOW_STATISTICS ('t_ci', ci);

GO

DBCC SHOW_STATISTICS ('t_ci', ni);

GO


-- c1, c3 column 정보들의 데이타 값은 유니크 합니다


------------------------------------------------------------------------------------------------------------------

-- ##. 조각 데이타 확인


--dbcc ind option indid

--0 : 힙상의 데이터

--1 : 클러스터된 인덱스

--2 ~ 251 : 클러스터되지 않은 인덱스 또는 통계

--255 : text, ntext, image형의 데이터 


--DBCC PAGE (DB Name, File Number, Page Number, Option) - 페이지 내용 보기

--Option

-- 0 : Header

-- 1 : Row 단위

-- 2 : page 그래도

-- 3 : 행 그리고 컬럼 값


--DBCC TRACEON(3604) -- 한 화면에 출력

------------------------------------------------------------------------------------------------------------------


-- 루트 페이지

DBCC ind ( indextest, t_ci, 2)

GO   


--PageFID PagePID IAMFID IAMPID ObjectID IndexID PartitionNumber PartitionID iam_chain_type PageType IndexLevel NextPageFID NextPagePID PrevPageFID PrevPagePID

--1 119 NULL NULL 2121058592 2 1 72057594038976512 In-row data 10 NULL 0 0 0 0

--1 118 1 119 2121058592 2 1 72057594038976512 In-row data 2 0 1 120 0 0

--1 120 1 119 2121058592 2 1 72057594038976512 In-row data 2 0 0 0 1 118

--1 121 1 119 2121058592 2 1 72057594038976512 In-row data 2 1 0 0 0 0


-- 루트 페이지 정보 검색

DBCC TRACEON(3604)

DBCC page(indextest, 1, 121, 3)

go


--FileId PageId Row Level ChildFileId ChildPageId c3 (key) c1 (key) UNIQUIFIER (key) KeyHashValue

--1 121 0 1 1 118 NULL NULL NULL NULL

--1 121 1 1 1 120 10578 578 0 NULL


-- 논 리프 페이지 

DBCC page(indextest, 1, 120, 3)

go



--FileId PageId Row Level c3 (key) c1 (key) UNIQUIFIER (key) KeyHashValue

--1 120 0 0 10578 578 0 (386f53916731)

--1 120 1 0 10579 579 0 (e5686b95e8c9)

--1 120 2 0 10580 580 0 (f47fc3894522)

--1 120 3 0 10581 581 0 (2978fb8dcada)

--1 120 4 0 10582 582 0 (4f70b3815bd3)

--1 120 5 0 10583 583 0 (92778b85d42b)

--1 120 6 0 10584 584 0 (6c5ee3b80104)

--1 120 7 0 10585 585 0 (b159dbbc8efc)

--1 120 8 0 10586 586 0 (d75193b01ff5)

--1 120 9 0 10587 587 0 (0a56abb4900d)

--1 120 10 0 10588 588 0 (1b4103a83de6)

--1 120 11 0 10589 589 0 (c6463bacb21e)

--1 120 12 0 10590 590 0 (a04e73a02317)

--1 120 13 0 10591 591 0 (7d494ba4acef)

--1 120 14 0 10592 592 0 (eee518b8dc9a)

--1 120 15 0 10593 593 0 (33e220bc5362)

------------------------------------------


-- c1값이 모두 유니크 함으로 UNIQUIFIER(Key) 값은 모두 0입니다. 

-- KeyHashValue Value 



UPDATE t_ci

SET

c1 = 9000

WHERE c1 IN ( 578, 579)

GO


-- 논 리프 페이지 

DBCC page(indextest, 1, 120, 3)

go


--FileId PageId Row Level c3 (key) c1 (key) UNIQUIFIER (key) KeyHashValue

--1 120 1 0 10578 9000 0 (15af3e99462f)

--1 120 3 0 10579 9000 1 (dfcb6fa8dd0b)

--1 120 4 0 10580 580 0 (f47fc3894522)


-- UNIQUIFIER, KeyHashValue 값이 변경되었죠? 동일한 값을 구분하기 위해 구분자가 있는 것 같습니다.

GO


-- 조각 구성을 다시 해보았습니다.

create clustered index ci on dbo.t_ci( c1) 

with drop_existing

go


-- 논 리프 페이지 

DBCC page(indextest, 1, 120, 3)

go


--FileId PageId Row Level c3 (key) c1 (key) UNIQUIFIER (key) KeyHashValue

--1 120 0 0 10578 9000 0 (15af3e99462f)

--1 120 1 0 10579 9000 1 (dfcb6fa8dd0b)

--1 120 2 0 10580 580 0 (f47fc3894522)

--1 120 3 0 10581 581 0 (2978fb8dcada)

--1 120 4 0 10582 582 0 (4f70b3815bd3)


변화가 없습니다.^^
결론은 데이타가 변하지 않은 이상 WITH DROP_EXISTING으로 재작성시 변화는 없다는 결론입니다.^^