11. index(1) - 개요, 장단점, 종류


 - 인덱스의 개요

DB의 성능을 향상시키는 것이 목적.

적절한 사용으로 데이터에 빠르게 접근한다.

DB 튜닝의 큰 효과를 볼 수 있다.

과다한 사용은 성능이 떨어진다.

필요없는 인덱스가 많아지면 DB에 차지되는 공간이 많아져 table scan보다 속도가 느려질 수 있다.

(table scan : 인덱스를 사용하지 않고 DB를 처음부터 끝까지 탐색하는 것)


- 장점과 단점

무조건은 아니지만, 데이터 검색속도가 향상된다.

시스템 부하가 줄어들고 시스템의 전체 성능이 높아진다.


DB의 10%정도 공간이 요구된다.

인덱스를 생성하는 시간이 크게 요구된다.

DB의 변경작업(Insert, Update, Delete)이 잦으면 성능이 저하된다.


- Index의 종류

  Clustered Index

   사전처럼 데이터가 순차적으로 정렬되어 있다.

   테이블당 한 개만 생성이 가능하다.

   행 데이터를 인덱스로 지정한 열에 맞춰 자동으로 정렬한다.

   테이블 생성시 제약조건이 없다면 인덱스를 만들 수 없다.

   기본키를 생성시 기본키에 Clustered Index가 된다.


   Non-Clustered Index

   테이블당 여러개를 생성 할 수 있다.


 - 예제를 통해 확인하는 Index의 특징

기본키로 지정하면 기본키에 Clustered Index가 생성된다.

1
2
3
4
create table users
( id   varchar not null primary key,
  name varchar,
 .....
cs

     

* 기본키를 지정하면서 Non-Clustered Index를 생성할 수 있다.

  그 결과 Clustered Index의 여분이 있데 된다.

1
2
3
4
create table users
( id   varchar not null primary key nonclusterd,
  name varchar,
 .....
cs


 * unique로 지정한 행마다 Non-Clustered Index가 생성된다.

   (한 테이블에 여러개의 Non-Clustered Index가 생성될 수 있다.)

1
2
3
4
5
6
create table users
( id      varchar not null primary key,
  name    varchar unique,
  digit   varchar unique,
  address varchar
)
cs


  * 강제로 Clustered Index와 Non-Clustered Index를 지정할 수 있다.

    (기본키로 무조건  Clustered Index를 지정되는 것이 아니다. 단지 Default로 지정될 뿐이다.)

1
2
3
4
5
6
create table users
( id      varchar not null primary key nonclustered,
  name    varchar unique clustered,
  digit   varchar unique,
  address varchar
)


cs

    

        * Clustered Index로 지정된 열에 따라 테이블이 정렬된다.

1
2
3
4
5
6
7
8
9
10
11
create table users(
  id   varchar primary key,
  name varchar
);
 
insert into users('ccc''111');
insert into users('ddd''222');
insert into users('bbb''333');
insert into users('aaa''444');
 
select * from users;
cs

      결과

      id        name

      ----------------

      aaa      444

      bbb     333

      ccc      111

      ddd     222

      입력된 순서대로 보여질거라 생각했지만 Clustered Index에 의해 정렬되어 표현한다.

+ Recent posts