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)의 차이점은 아래를 참조해주세요.
이번에는 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 ~ 문을 사용하여 인덱스를 추가할 수 있습니다.
댓글