Index(인덱스)
인덱스는 데이터베이스 테이블의 검색 성능을 향상시키기 위해 사용하는 자료구조이다.
장점:
검색 속도 향상: 테이블 전체를 스캔하지 않고 인덱스를 통해 빠르게 조회 가능
정렬 속도 향상: 이미 정렬된 인덱스를 읽어오므로 별도의 정렬 과정 생략 가능
단점:
추가 저장 공간 필요: 인덱스는 원본 테이블과 별도의 저장 공간 필요
쓰기 성능 저하: 데이터 변경 작업이 발생할 때마다, 테이블의 데이터뿐만 아니라 인덱스 정보도 함께 수정 필요
실제로 인덱스를 적용하면 큰 성능 향상을 가져올 수 있다.
SELECT {{SAME QUERY ...}}
-- [2023-04-14 02:52:38] 8 rows retrieved starting from 1 in 3 s 892 ms (execution: 3 s 876 ms, fetching: 16 ms)
-- CREATE INDEX ... completed in 29 s 426 ms
SELECT {{SAME QUERY ...}}
-- [2023-04-14 02:53:19] 8 rows retrieved starting from 1 in 73 ms (execution: 55 ms, fetching: 18 ms)
인덱스의 종류와 특징
인덱스는 역할, 데이터 저장 방식, 구성 등 다양한 기준에 따라 분류할 수 있다.
역할에 따른 분류
프라이머리 키 (Primary Key): 테이블에서 각 레코드를 고유하게 식별하는 역할을 하는 인덱스
NULL
값 허용 X테이블당 하나만 존재
클러스터형 인덱스로 관리(InnoDB 기준)
보조 인덱스 (Secondary Index): 프라이머리 키를 제외한 모든 인덱스
데이터 저장 방식(InnoDB 기준)
클러스터형 인덱스(Clustered Index)
프라이머리 키에 의해 생성
키 값의 순서에 따라 테이블의 데이터가 물리적으로 정렬되어 저장
인덱스의 리프 노드가 곧 데이터 레코드 자체이므로, 프라이머리 키로 검색 시 데이터 조회 속도가 매우 빠름
테이블당 하나만 존재
비클러스터형 인덱스(Non-Clustered Index)
보조 인덱스에 해당
데이터가 아닌 프라이머리 키 값을 리프 노드에 저장
데이터를 조회할 경우, 인덱스에서 프라이머리 키 값을 찾은 후, 다시 클러스터형 인덱스를 통해 최종 데이터 레코드를 찾는 과정이 필요
기타 분류
유니크 인덱스(Unique Index): 프라이머리 키와 유사하게 중복된 값을 허용하지 않는 인덱스
프라이머리 키와 달리
NULL
값 허용여러 개 생성 가능
복합 인덱스(Composite Index): 두 개 이상의 컬럼을 조합하여 생성한 인덱스
참고자료
Last updated
Was this helpful?