인덱스는 데이터베이스에서 검색 성능을 높이기 위해 사용하는 자료구조이다.
책의 목차처럼 원하는 데이터를 빠르게 찾을 수 있도록 도와준다.
B-Tree 인덱스는 가장 일반적으로 사용되는 인덱스 구조로, 데이터를 정렬된 트리 형태로 저장하고,
검색 시 트리를 따라 내려가면서 값을 찾는 방식이다.
B-Tree 인덱스의 가장 큰 장점은 범위 검색이 가능
하다는 점이다.
ex) WHERE age > 30, BETWEEN, LIKE 'abc%' 등의 조건에서 유리하다.
또한 정렬이 되어 있기 때문에 ORDER BY
, GROUP BY
와 같은 쿼리에도 효율적으로 사용될 수 있다.
Hash 인덱스는 데이터를 해시 함수를 통해 변환하여 인덱스를 구성한다.
"정확히 일치하는 값" 을 매우 빠르게 찾을 수 있는 구조이다.
Hash인덱스는 동등 조건에서 뛰어난 성능을 보인다.
ex) WHERE id = 12345
하지만, 값의 순서를 알 수 없기 때문에 범위 검색이 불가능하다.
ex) WHERE id > 1000 Hash 인덱스는 불가능
B-Tree 인덱스는 범위 검색, 정렬, 다양한 조건 처리에 유연하여 대부분에 DB에서 기본 인덱스 타입으로 사용된다.
반면, Hash 인덱스는 정확한 값 비교에는 특화되어 있지만, 범위나 정렬 관련 쿼리에는 적합하지 않다.
실제 MySQL(InnoDB)에서는 대부분 B-Tree 인덱스를 기본으로 사용하고 있고, Hash 인덱스는 특정 스토리지 엔진(Memory 엔진 등)에서만 제한적으로 사용된다.
=> 인덱스는 읽기 성능을 높이지만, 쓰기 성능을 희생하는 구조이다.
따라서 읽기 위주의 시스템(검색 서비스, 리포트 대시보드 등)은 인덱스를 적극적으러 활용하고,
쓰기 위주의 시스템(로그 수집, 트랜잭션 처리 등)은 최소한의 인덱스만 활용한다.
인덱스 없이 테이블 전체를 훑는 스캔 방법
인덱스를 따라 범위 내 값을 검색
필요한 데이터가 모두 인덱스에 있어 테이블 접근 생략
대량의 조건에 대한 효울적인 검색
고유한 인덱스에서 정확히 하나읙 값만 찾을 때
복합 인덱스란, 두 개 이상의 컬럼을 조합해 만든 인덱스이다.