반응형

테이블과 데이터들을 추가한다

USE Northwind;

--db 정보 보기
EXEC sp_helpdb 'Northwind';

create table Test
(
	EmployeeID INT NOT NULL,
	LastName NVARCHAR(20) NULL,
	FirstName NVARCHAR(20) NULL,
	HireDate DATETIME NULL,

);

SELECT *
FROM Test;

--Employees 데이터를 Test 에 추가한다
INSERT INTO Test
SELECT EmployeeID, LastName, FirstName, HireDate
FROM Employees;

RESULT

 

 

 

 

--index 를 걸 컬럼= LastName
--FILLFACTOR 리프 페이지 공간 1%만 사용 , 전체 사용 공간 중에 1%만 사용 하겠다는 것, 이러면 데이터가 다 안들어가기 때문에 별도 트리구조로 데이터를 저장함
--PAD_INDEX (FILFACTOR 가 중간 페이지에도 적용되게 하는 것) => 결과적으로 공간을 비효율적으로 사용하게끔 하는 것인데 목적이 테스트 하는 것임
CREATE INDEX Test_Index ON Test(LastName)
WITH (FILLFACTOR = 1, PAD_INDEX = ON)


--인덱스가 만들어진 sys.indexes 에서 index_id와 name 을 출력하는데 조건이 
--Test 에 만든 인덱스 id 와 같은것만 출력한다
SELECT index_id, name
FROM sys.indexes
WHERE object_id = object_id('Test');

 

결과 화면은 이런데 여기서 인덱스 Test_Index 를 조사해보면

 

--2번 인덱스 정보 살펴보기
DBCC IND('Northwind','Test', 2);

빨간색 박스의 IndexLevel 이

 

가장 높은 숫자가 트리의 Root 이고

2 -> 1 -> 0 

순으로 자식을 이루고 있는 인덱스 트리를 생각 하면 된다

 

2 가 가장 상단 그다음에 1에 해당 하는 것이 PagePID 보면 1008, 984 두개가 있는데

이 중에서 NextPagePID 를 1 레벨에서 다음을 말하는 것이 984 라고 나와 있는 것

즉 순서가 985 -> 1008 -> 984  로 되어 있다는 것을 알 수 있다

 

 트리 형태로 보면 가장 상단 레벨 1에 1개 2 레벨에 2개 3 레벨에 3개의 노드가 있다고 생각하면 된다

그런데 각 노드는 페이지들인데 이 정보들 또한 볼 수 있다

 

끝단 3개의 노드를 출력해보면

--1 파일번호, 968 페이지 번호, 3 출력 옵션
DBCC PAGE('Northwind',1, 968, 3);
DBCC PAGE('Northwind',1, 976, 3);
DBCC PAGE('Northwind',1, 977, 3);

 

 

위 처럼 되고 

원래 추가된 9개 와 비교해보면 3개씩 나뉘어져 들어가 있는 것을 알 수 있다

 

HEAP RID 라는 걸 볼 수 있는데

HEAP RID = 페이지주소(4바이트) , 파일 ID(2), 슬롯번호(2), 로 조합된 8바이트 ROW 식별자이고 이걸로

테이블에서 정보를 추출한다

 

TABLE [{PAGE} {PAGE} {PAGE} ....]  여기서 찾는 형태이다

 

 

RANDOM ACCESS (한건을 읽기 위해 한 페이지씩 접근 하는것 으로 트리 위에서 부터 아래로 노드를 찾아가는 과정)

BOOKMARK LOOKUP : 노드를 찾은다음 RID를 통해 행을 실제 TABLE 에서 찾는 것을 말함 

반응형

+ Recent posts