데이터베이스 테이블에 대한 검색 속도를 향상 시켜주는 자료구조.
책의 목차 또는 색인과 같은 개념.
테이블의 모든 데이터를 검색하면 시간이 오래 걸림 -> 데이터와 데이터의 위치를 포함한 자료구조를 생성, 빠르게 조회할 수 있다.
DBMS는 인덱스를 항상 최신의 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다.
INSERT
: 신규 데이터에 대한 인덱스를 추가DELETE
: 삭제하는 데이터의 인덱스를 더이상 사용하지 않게 해야함.UPDATE
: 기존의 인덱스는 사용하지 않고, 갱신된 데이터에 대해 인덱스를 추가함.
가장 큰 특징은 테이블의 데이터들이 정렬이 되어있다는 점. 이 특징으로 인해 조건 검색이라는 영역에서 굉장한 장점을 가짐.
데이터가 쌓일 수록 레코드 내부는 순서가 뒤죽박죽으로 저장되는데,
이렇게 되면 WHERE
절에 특정 조건에 맞는 데이터를 검색할 때 풀 테이블 스캔(Full Table Scan)으로 레코드의 처음부터 끝까지 데이터를 다 읽어서 검색 조건과 비교를 한다.
하지만 인덱스 테이블은 데이터들이 정렬되어 있기 때문에 해당 조건(WHERE
)에 맞는 데이터를 빠르게 찾아낸다.
INSERT
, DELETE
, UPDATE
가 빈번한 속성에 인덱스를 걸게 되면 인덱스의 크기가 비대해져 오히려 성능이 저하됨 : UPDATE
와 DELETE
는 기존의 인덱스를 삭제하는 것이 아닌 [사용하지 않음] 처리를 하기 때문.INSERT
, DELETE
, UPDATE
가 빈번하지 않은 컬럼JOIN
, WHERE
, ORDER BY
에 자주 사용되는 컬럼대표적인 자료구조로는 해시 테이블과 B+Tree가 있다.
해시함수는 값이 1이라도 달라지면 완전히 다른 해시 값을 생성하기 때문
부등호 연산(<,>)이 자주 사용되는 데이터베이스 검색에는 적합하지 않음.
ex) 오늘은
으로 시작하는 모든 데이터를 검색하기 위한 쿼리문은 인덱스의 혜택을 받지 못함.
데이터의 빠른 접근을 위한 인덱스 역할만 하는 비단말 노드(not Leaf)가 추가로 있음 (기존의 B-Tree와 데이터의 연결리스트로 구현된 색인구조)
https://mangkyu.tistory.com/96
https://coding-factory.tistory.com/746
https://sdesigner.tistory.com/79