Index란
색인. 데이터베이스에서 조회 및 검색을 더 빠르게 할 수 있는 방법/기술.
사용 이유
- SELECT를 사용하여 원하는 조건의 데이터를 검색할 때, 저장된 데이터 양이 엄청나게 많다면 검색을 위한 순회에 많은 자원과 시간이 소모됨.
- 따라서 자주 조회되는 Column에 대한 Index Tabel을 따로 만들어 SELECT문이 들어왔을 때 Index 테이블에 있는 값들로 결과 값을 조회해 옴으로써 ‘검색’ 연산 시 성능을 올릴 수 있게 됨
동작
- SCOUNTER 테이블 생성 시 AIRPORT 칼럼에 대한 인덱스를 주면 AIRPORT 칼럼에 대한 인덱스 테이블이 생성됨
- 이후 SCOUNTER 테이블에 AIRPORT 칼럼에 대한 WHERE문이 포함된 쿼리가 나갈 때 AIRPORT 인덱스 테이블에 저장된 key-value 값을 참조해서 SCOUNTER 테이블에서 결과 값을 반환해옴
B+tree 알고리즘
B+tree는 리프노드에 이르기까지에 대한 자식 노드 포인터가 저장되어 있음. 즉, B+트리의 검색은 투르 노드에서 어떤 리프 노드에 이르는 한 개의 경로만 검색하면 되므로 매우 효율적임
- hash table보다 효율적인 이유 : 쿼리 조건에는 부등호 연산(<>)도 포함됨. hash table은 동등 연산(=)에 특화된 자료구조이기 때문에 부등호 연산 사용 시 문제 발생
주의할 점
- 인덱스는 따로 테이블의 형태로 관리되므로, 자원을 소모한다.(비용 발생)
- 인덱스는 이진트리를 사용하기 때문에 기본적으로 정렬되어 있다. 따라서 잦은 데이터의 변경(CRUD)이 일어난다면, 이에 대한 오버헤드가 발생하여 오히려 성능 저하가 일어날 수 있음