1. 인덱스란?
데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
인덱스를 사용하지 않은 컬럼을 조회해야 한다면 전체를 탐색해야 한다(Full Scan)
하지만 인덱스를 사용한다면 일부만 탐색하면 되기 때문에 속도가 향상된다(Range Scan)
2. 인덱스의 장점과 단점
인덱스를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다.
인덱스는 약 10%의 공간을 차지한다고 한다.
하지만,
INSERT : 만약 할당된 공간이 가득 차 있는 상황에서 INSERT 연산이 수행된다면, 다시 새 페이지를 할당해서 밀어내고 정렬하고... 할 일이 매우 많다! 또한 인덱스 할당을 위한 공간이 추가적으로 더 필요하다.
DELETE: 데이터가 삭제되어도 인덱스는 '사용 안 함'으로 기록되고 삭제되지 않는다. 공간 낭비가 발생한다.
UPDATE: 인덱스는 UPDATE 되지 않는다. DELETE→INSERT 연산을 수행한다.
즉, 상황에 맞게 인덱스 사용 여부를 결정해야 한다.
정리하자면,
장점
테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
전반적인 시스템의 부하를 줄일 수 있다.
단점
인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
인덱스를 관리하기 위해 추가 작업이 필요하다.
인덱스를 잘못 사용할 경우 성능이 저하될 수 있다.
3. 카디널리티
Cardinality는 '종류의 수'라고 이해하면 편하다. 인덱스의 평가 요소로 카디널리티가 있다.
즉, 유일한 값, 즉 카디널리티가 높을 수록 인덱스 성능이 높다고 할 수 있다.
중복이 낮을수록 카디널리티는 높을 것이고, 인덱스에 적합한 후보가 된다.
4. 인덱스 종류
① Clustered Index
- 순서대로 정렬되어 있다.
- 그렇기 때문에 중간에 삽입되거나 삭제될 때 비용이 크다.
- 테이블 당 1개만 존재한다.
- 리프 페이지 == 데이터 페이지
- 트리 구조를 갖는다.
- 보통 PK는 auto_increment 하다.
② Non-Clustered Index
- 간접 참조 형식이다.(주소값 저장)
- 보조 인덱스로 사용된다.
- 테이블에 여러개가 존재 가능하다.
- 인덱스와 데이터 페이지가 따로 존재한다.
- 정렬되지 않아도 된다.
- clustered Index보다 약간 느리다.
- 하지만 insert, update, delete 연산 수행 시 clustered Index보다 성능이 좋다.
5. 인덱스 자료구조
B Tree
- Binary Tree가 아니라 Balanced Tree이다.
- 이진 트리를 확장하여 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리구조이다.
- 모든 leaf node는 모두 같은 level에 있다.
- 따라서 인덱스 탐색 시 중위순회 한다.
- 노드 내의 값은 오름차순을 유지한다.
- 모든 노드가 data이다.
B+ Tree
- leaf node들이 list로 연결되어 있고, leaf만 data 이다.
- 데이터 탐색 시 무조건 logN의 시간이 걸린다.
'CS > 데이터베이스' 카테고리의 다른 글
트랜잭션의 격리수준 (0) | 2021.09.28 |
---|---|
Injection (0) | 2021.09.28 |
수직적 확장과 수평적 분할 (0) | 2021.09.28 |
트랜잭션의 정의와 특징 (0) | 2021.06.30 |
Key (0) | 2021.06.23 |