USE Northwind;
-- [1] 테스트 테이블 생성
CREATE TABLE TestAccess
(
id INT NOT NULL,
name NCHAR(50) NOT NULL,
dummy NCHAR(1000) NULL -- 일부러 페이지 수 늘리기 위함
);
-- [2] 클러스터드, 논클러스터드 인덱스 생성
CREATE CLUSTERED INDEX TestAccess_CI ON TestAccess(id);
CREATE NONCLUSTERED INDEX TestAccess_NCI ON TestAccess(name);
-- [3] 테스트 데이터 입력
DECLARE @i INT = 1;
WHILE (@i <= 500)
BEGIN
INSERT INTO TestAccess VALUES (@i, 'Name' + CONVERT(VARCHAR, @i), 'Hello World' + CONVERT(VARCHAR, @i));
SET @i += 1;
END
EXEC sp_helpindex 'TestAccess';
SELECT index_id, name
FROM sys.indexes
WHERE object_id = object_id('TestAccess');
index_id = 1 → Clustered Index (id)index_id = 2 → Non-Clustered Index (name)SET STATISTICS TIME ON;
SET STATISTICS IO ON;
SELECT * FROM TestAccess;
📌 페이지 구조:
Clustered Index Root: 8097
Leaf: 944 ~ 8103 (총 167 페이지)
SELECT * FROM TestAccess WHERE id = 104;
📌 탐색 과정:
1. 루트 페이지 → ID 탐색
2. 해당 ID 위치한 페이지 접근
SELECT * FROM TestAccess WHERE name = 'Name5';
📌 탐색 과정:
1. 논클러스터드 인덱스에서 name5 탐색
2. 해당 행의 ID 값을 얻음
3. 클러스터드 인덱스에서 ID를 다시 탐색
이때 클러스터드 인덱스 접근을
Key Lookup이라고 부른다.
SELECT TOP 5 * FROM TestAccess ORDER BY name;