8.2 인덱스란?
- DBMS에서 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래 걸린다.
- 칼럼(또는 칼럼들) 값과 해당 레코드가 저장된 주소를 key-value로 인덱스를 만들 수 있다.
- 인덱스는 칼럼 값을 주어진 순서로 미리 정렬해서 보관한다.
- 이미 정렬돼 있어서 아주 빨리 원하는 값을 찾아올 수 있다.
- 결론적으로 인덱스란 데이터의 저장(
INSERT
, UPDATE
, DELETE
) 성능을 희생하고 그 대신 데이터 읽기 속도를 높이는 기능이다.
SELECT…WHERE
조건절에 사용되는 칼럼이라고 모든 인덱스로 생성하면 데이터 저장 성능이 떨어지고 인덱스 크기가 비대해져 역효과일 수도 있다.
프라이머리 키와 세컨더리 인덱스
- 프라이머리 키 인덱스
- 프라이머리 키르 만들어진 인덱스를 의미
- 프라이머리 키는 NULL 값을 허용하지 않으며 중복을 허용하지 않는 것이 특징이다.
- 세컨더리 인덱스
- 프라이머리 키 인덱스를 제외한 모든 인덱스
- 유니크 인덱스도 세컨더리 인덱스이다.
데이터 저장 알고리즘에 따른 인덱스 분류
- B-Tree 인덱스
- 인덱스 칼럼 값은 변형하지 않고 원래 값을 이용해 인덱싱하는 알고리즘
- Hash 인덱스
- 칼럼 값으로 해시값을 계산해서 인덱싱하는 알고리즘
- 매우 빠른 검색 지원
- 하지만 값을 변형하므로 Prefix 일치 같은 값의 일부 검색에서는 해시 인덱스를 사용할 수 없다.
- 주로 메모리 기반 데이터베이스에서 많이 사용