티스토리 뷰

원문 : http://stackoverflow.com/questions/6857007/what-is-the-purpose-of-pad-index-in-this-sql-server-constraint



[질문]


제 테이블들 중에서 아래와 같은 제약을 가진 테이블들이 있지만 PAD_INDEX가 무엇을 의미하는지 모르겠어요. 

누군가 저를 이해 시켜주실 수 있을까요?


CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
(
    [EmployeeId] ASC
) WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
        ^--------------^
         this part here


[답변 1]


SQL Server 에서 인덱스는 B-Tree 입니다. 

최하단 layer에서 FILLFACTOR를 적용합니다. 이는 아래의 그림에서 leaf node/data layer 입니다.


PAD_INDEX ON는 "모든 레이어에 FILLFACTOR를 적용한다"라는 의미 입니다.

이는 아래 그림에서 root node와 intermediate level입니다.


PAD_INDEX라는 의미는 FILLFACTOR를 설정하는 데에서만 사용이 됩니다. FILLFACTOR는 data page 내에서 얼마나 많은 free 공간이 있는지 알아냅니다. 






[답변 2]


MSDN에서 참조


PAD_INDEX = { ON | OFF }

인덱스 padding을 명시합니다. 기본 값으로 OFF 입니다.


ON : fillfactor에 의해 명시되는 free 공간의 비율이 인덱스 페이지의 intermediate-level에서 적용됩니다.


OFF 또는 fillfactor 비명시 : intermediate page의 키 집합을 고려하여 적어도 index가 가질 수 있는 one row의 최대 크기의 충분한 공간을 남겨둔 채로 intermediate-level pages는 채워집니다.


PAD_INDEX 옵션은 FILLFACTOR를 명시할 때만 도움이 됩니다. 왜냐하면 PAD_INDEX는 FILLFACTOR에 의해 특정 비율을 사용하기 때문입니다. FILLFACTOR의 특정 비율이 one row를 위해 허용된 충분한 공간을 가지고 있지 않다면 데이터베이스 엔진 내부에서 최소한의 할당을 위한 비율을 무시합니다. intermediate index page에서 row들의 수는 fillfactor 값이 얼마나 작은가에 상관없이 2 보다 작아서는 안됩니다. 


이전 버전과 호환되는 구문에서 WITH PAD_INDEX = ON 과 동일합니다.



단어


purpose : 목적, 의도, 용도

constraint : 제약, 제한, 통제

determine : 알아내다, 밝히다.

specifies : 명시하다.

sufficient : 충분한

override : 무시하다, 우선하다, 중단시키다.

regardless : 개의치[상관하지] 않고



문법


The intermediate-level pages are filled to near capacity, leaving sufficient space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages.


be filled to (near) capacity : ~ 가득 채워 진다.

이 숙어 뒤에 오는 쉼표로 구분되는 문장들이 숙어를 꾸며주게 된다. 그리고 각 쉼표의 문장들은 뒤에서부터 해석.


댓글
댓글쓰기 폼