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 ) |
* 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에 의해 정렬되어 표현한다.
'Database > Theory' 카테고리의 다른 글
[Database/Theory] 13. index(3) - 생성 시기 (0) | 2016.06.19 |
---|---|
[Database/Theory] 12. index(2) - 내부적 동작 (0) | 2016.06.17 |
[Database/Theory] 10. Join(1) (0) | 2016.06.16 |
[Database/Theory] 09. SQL syntax(7) - Rownum (0) | 2016.06.08 |
[Database/Theory]08. SQL syntax(6) - Sub query (0) | 2016.06.07 |