인덱스의 개념과 자동 생성
인덱스의 개념
개념
- 책의 뒷부분에 있는 색인 또는 찾아보기와 비슷한 개념
- 작은 데이터에는 없어도 별 차이 없지만, 대량의 데이터에는 인덱스가 있어야만 데이터를 빠른 시간에 검색할 수 있다
장단점
장점
- 검색 속도가 매우 빨라질 수 있음
- 반드시 빨라지는 것은 아님
- 시스템 부하가 줄어, 시스템 전체의 성능이 향상됨
단점
- 인덱스가 데이터베이스 공간을 차 지해서 추가적인 공간 필요
- 약 데이터베이스의 10% 내외의 공간이 추가로 필요
- 인덱스를 생성하는데 시간이 많이 소요됨
- 데이터의 변경 작업(
INSERT
,UPDATE
,DELETE
)이 자주 일어날 경우에는 성능이 많이 저하될 수 있음
종류
-
클러스터 형 인덱스
영어사전과 비슷한 개념
-
비클러스터 형 인덱스
일반 책의 '찾아보기'와 비슷한 개념
특징
- 클러스터형 인덱스는 테이블당 1개만 생성됨
- 비클러스터형 인덱스는 테이블당 여러 개 생성됨
- 클러스터형 인덱스는 행 데이터를 인데긋로 지정한 열에 맞춰서 자동 정렬함
- 제약 조건 없이 테이블 생성 시에는 인덱스를 만들 수 없음
- 인덱스가 자동 생성되기 위한 열의 제약 조건은 Primary Key와 Unique 뿐임
Primary Key 지정 시 자동으로 클러스터형 인덱스 지정 Unique Key 지정 시 자동으로 비클러스터형 인덱스 지정
인덱스 자동 생성
sp_helpindex 사용하기
USE tempDB;
CREATE TABLE tbl1 (
a INT PRIMARY KEY,
b INT UNIQUE,
c INT UNIQUE,
d INT
);
GO
EXEC sp_helpindex tbl1;
GO
실행 결과
| index_name | index_description | index_keys |
| ----------------------- | ------------------------------------------------- | ---------- |
| PK_tbl1_3BD019EA38723D8 | clustered.unique.primary key located on PRIMARY | a |
| PK_tbl1_3BD019EA392SA1F | nonclustered.unique.unique key located on PRIMARY | b |
| PK_tbl1_3BD019E81ASG19K | nonclustered.unique.unique key located on PRIMARY | c |
비클러스터 지정
정보
명시적으로 비클러스터 지정 시 PRIMARY KEY 도 비클러스터 인덱스로 지정이 가능하다
sp_helpindex 사용하기
USE tempDB;
CREATE TABLE tbl2 (
a INT PRIMARY KEY,
b INT UNIQUE CLUSTERED,
c INT UNIQUE,
d INT
);
GO
EXEC sp_helpindex tbl2;
GO
실행 결과
| index_name | index_description | index_keys |
| ----------------------- | ------------------------------------------------- | ---------- |
| PK_tbl2_3BD019EA392SA1F | nonclustered.unique.unique key located on PRIMARY | a |
| PK_tbl2_3BD019EA38723D8 | nonclustered.unique.unique key located on PRIMARY | b |
| PK_tbl2_3BD019E81ASG19K | nonclustered.unique.unique key located on PRIMARY | c |
클러스터 지정
정보
명시적으로 클러스터 지정 시 UNIQUE KEY 도 클러스터 인덱스로 지정이 가능하다
sp_helpindex 사용하기
USE tempDB;
CREATE TABLE tbl3 (
a INT PRIMARY KEY,
b INT UNIQUE CLUSTERED,
c INT UNIQUE,
d INT
);
GO
EXEC sp_helpindex tbl3;
GO
실행 결과
| index_name | index_description | index_keys |
| ----------------------- | ------------------------------------------------- | ---------- |
| PK_tbl3_3BD019EA392SA1F | nonclustered.unique.unique key located on PRIMARY | a |
| PK_tbl3_3BD019EA38723D8 | clustered.unique.primary key located on PRIMARY | b |
| PK_tbl3_3BD019E81ASG19K | nonclustered.unique.unique key located on PRIMARY | c |