MSSQL 테이블 작성 인덱스 생성 하기

SQL Server 테이블에 인덱스(INDEX)추가하는 방법을 보겠습니다.

테이블을 만드는 CREATE에 추가해 테이블 생성할 때 인덱스를 같이 설정하는 방법과 이미 만들어진 테이블에 인덱스를 추가하는 방법을 보겠습니다.

 

인덱스 설정 하기

인덱스를 작성하는 쿼리문은 CREATE INDEX ~ON ~을 사용합니다.

기존에 생성된 테이블에 인덱스를 추가하는 방법은 아래 쿼리문은 다음과 같습니다.

-- 클러스터 인덱스 작성
CREATE CLUSTERED INDEX '인덱스 이름' ON '테이블 이름' ('컬럼 이름');

-- 넌클러스터 인덱스 작성
CREATE NONCLUSTERED INDEX '인덱스 이름' ON '테이블 이름' ('컬럼 이름');

 

예제를 통해 직접 사용방법을 확인하겠습니다.

먼저 테이블을 하나 생성하겠습니다.

테이블에는 PRIMARY KEY, UNIQUE KEY, INDEX는 설정하지 않겠습니다.

테이블 생성

-- 성적 테이블 작성
CREATE TABLE STUDENT_GRADE
(
	STUDENT_ID int NOT NULL,
	STUDENT_NAME nvarchar(20) NOT NULL,
	SCORE int NOT NULL,
) 

 

 

데이터도 몇개 입력 하겠습니다.

INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (1, N'이름 1', 391)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (2, N'이름 2', 489)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (3, N'이름 3', 437)

 

화면에서도 볼 수 있듯이 인덱스가 없습니다.

이번에는 INDEX를 추가하겠습니다.

CREATE CLUSTERED INDEX ‘인덱스 이름’ ON ‘테이블 이름’ (‘컬럼 이름’);

 

CREATE CLUSTERED INDEX user__index__STU ON STUDENT_GRADE (STUDENT_ID);

 

 

인덱스가 추가된 것이 보입니다.

예제에서는 CLUSTERED INDEX로 실행하였습니다.

NONCLUSTERED INDEX로 실행 방법은 같습니다.

클러스터 인덱스(CLUSTERED INDEX)와 넌클러스터 인덱스(NONCLUSTERED INDEX)의 차이점은 아래를 참조해주세요.

MSSQL CLUSTERED INDEX와 NONCLUSTERED INDEX 차이점
테이블에 인덱스를 생성하거나 추가하는 경우가 많습니다. 인덱스를 추가하는 쿼리는CREATE INDEX ~ON ~을 사용합니다. CREATE INDEX 문으로 추가를 할 때CLUSTERED또는NONCLUSTERED를 설정할 수 있습니다. 어떠한 차이가 있는지 살펴보겠습니다. 클러스터 인덱스와 넌클러스터 인덱스 먼저 두개를 간략하게 비교해보면 CLUSTEREDNONCLUSTERED인덱스테이블당 1개만 가능테이블에 여러개 가능(240개 정도)정렬물리적으로 행을 정렬물리적으로 행을 정렬 안함 클러스터 인덱스는 데이터를 등록할 때 지정한 인...

 

이번에는 CREATE 문으로 테이블을 생성할 때 인덱스를 설정하는 방법을 보겠습니다.

이번에도 역시 PRIMARY KEY, UNIQUE KEY는 설정하지 않겠습니다.

테이블 생성 인덱스

CREATE TABLE STUDENT_GRADE
(
	STUDENT_ID int NOT NULL,
	STUDENT_NAME nvarchar(20) NOT NULL,
	SCORE int NOT NULL,
) ON [PRIMARY]
GO
CREATE CLUSTERED INDEX INDEX_STUDENT_GRADE ON STUDENT_GRADE
(
	STUDENT_ID
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

 

결과

 

테이블 생성과 동시에 인덱스도 설정되었습니다.

인덱스가 설정되었는지 쿼리로 확인하고 싶은 경우는 SP_HELPINDEX 사용합니다.

SP_HELPINDEX ‘테이블이름’

 

인덱스 확인 쿼리 예제

SP_HELPINDEX 'STUDENT_GRADE'

 

결과

 

정리

테이블에 인덱스를 추가하는 방법을 확인했습니다.

CREATE 문으로 테이블을 생성할 때 인덱스를 지정해주는 것이 가장 좋지만, 부득이한 경우로 인덱스를 추가하지 못한 경우라도 나중에 CREATE INDEX ~ON ~ 문을 사용하여 인덱스를 추가할 수 있습니다.

댓글