본문으로 건너뛰기

인덱스의 개념과 자동 생성

인덱스의 개념

개념

  • 책의 뒷부분에 있는 색인 또는 찾아보기와 비슷한 개념
  • 작은 데이터에는 없어도 별 차이 없지만, 대량의 데이터에는 인덱스가 있어야만 데이터를 빠른 시간에 검색할 수 있다

장단점

장점

  • 검색 속도가 매우 빨라질 수 있음
    • 반드시 빨라지는 것은 아님
  • 시스템 부하가 줄어, 시스템 전체의 성능이 향상됨

단점

  • 인덱스가 데이터베이스 공간을 차지해서 추가적인 공간 필요
    • 약 데이터베이스의 10% 내외의 공간이 추가로 필요
  • 인덱스를 생성하는데 시간이 많이 소요됨
  • 데이터의 변경 작업(INSERT, UPDATE, DELETE)이 자주 일어날 경우에는 성능이 많이 저하될 수 있음

종류

  • 클러스터 형 인덱스

    영어사전과 비슷한 개념

  • 비클러스터 형 인덱스

    일반 책의 '찾아보기'와 비슷한 개념


특징

  1. 클러스터형 인덱스는 테이블당 1개만 생성됨
  2. 비클러스터형 인덱스는 테이블당 여러 개 생성됨
  3. 클러스터형 인덱스는 행 데이터를 인데긋로 지정한 열에 맞춰서 자동 정렬함
  4. 제약 조건 없이 테이블 생성 시에는 인덱스를 만들 수 없음
  5. 인덱스가 자동 생성되기 위한 열의 제약 조건은 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 |