SQL 캠프 광고 이미지
  • SQL

인덱스 타입: B-Tree, Hash

SQL 캠프 광고 이미지
SQL 캠프 광고 이미지
 
PostgreSQL은 B-tree, Hash, GiST, SP-GiST, GIN, BRIN 등 여러 가지 인덱스 타입을 제공합니다. 각 인덱스 타입은 서로 다른 알고리즘을 사용합니다. 기본적으로 CREATE INDEX 명령어를 사용하여 인덱스를 만들면 가장 일반적인 상황에 맞는 B-Tree 인덱스를 생성합니다. 다른 인덱스 타입은 USING 키워드 뒤에 인덱스 타입을 명시하여 생성합니다. 예를 들어 해시 인덱스를 만들려면 다음과 같이 코드를 작성하면 됩니다.
 
 
 

B-Tree

B-Tree는 어떤 값과 정확히 일치하는 데이터를 찾을 때와 특정 값보다 크다 작다와 같이 범위로 찾을 때 모두 사용할 수 있습니다. 인덱싱된 열이 아래 연산자 중 하나를 사용한 비교를 통해 값을 찾아야 할 때 PostgreSQL 쿼리 플래너(*역자주: 옵티마이저라고도 부르며 데이터의 분포, 인덱스의 유뮤 등을 고려해 실행 계획을 세우고 각 계획의 비용을 계산하는 DBMS 내부의 프로세스입니다. 데이터 베이스의 성능을 결정하는 가장 핵심적인 기능이라고 볼 수 있습니다.)는 B-Tree 인덱스 사용을 고려합니다.
 
 
위 연산자들을 조합하여 만들 수 있는 BETWEENIN과 같은 연산도 B-Tree 인덱스로 할 수 있습니다. 또한 인덱스 열의 IS NULL 또는 IS NOT NULL 조건도 B-Tree 인덱스와 함께 사용할 수 있습니다.
LIKE~ 같은 패턴을 매칭하는 연산자에도 B-Tree를 사용할 수 있는데요. 패턴이 상수이거나 문자열의 시작 부분에 고정되어 있는 경우(예를 들어 col LIKE 'foo%' 또는 col ~ '^foo')에만 적용이 가능합니다. 이외의 경우(예를 들어 col LIKE '%bar')에는 적용이 불가능합니다. 또한 ILIKE~*에 대해 B-tree 인덱스를 사용할 수 있지만 패턴이 알파벳이 아닌 문자, 즉 대/소문자 변환의 영향을 받지 않는 문자로 시작하는 경우에만 사용할 수 있습니다.
B-Tree 인덱스는 정렬된 순서로 데이터를 검색하는 데에도 사용할 수 있습니다. 이 방법이 단순 스캔 및 정렬보다 항상 빠른 것은 아니지만 종종 유용합니다.
 
 

Hash

해시 인덱스는 인덱스 열의 값을 32비트 해시 코드로 저장합니다. 따라서 이러한 인덱스는 단순한 동일 비교만 처리할 수 있습니다.
 
 
 
✍🏻
Editor 선미’s comment
이 글의 원문은 PostgreSQL 공식문서 “Chapter 11. Indexes - 11.2. Index Types”입니다. PostgreSQL 버전 16을 기준으로 작성되었습니다.
이 글은 전문 번역이 아니라 자주 사용되는 B-Tree 위주로 번역을 했습니다. Hash 인덱스는 B-Tree의 범용성을 보여주기 위해 짧게 붙여보았어요. 대부분의 데이터베이스 인덱스가 B-Tree 또는 개선된 버전인 B+Tree로 구현이 되어있기 때문에 이 정도만 알고 있어도 충분합니다만, PostgreSQL에서 지원하는 모든 종류의 인덱스를 알고 싶은 분이라면 원문을 꼭 참고해주세요.
B-Tree는 인덱스의 핵심이 되는 알고리즘이기 때문에 원리를 간단하게라도 알면 인덱스를 이해하는데 도움이 많이 됩니다. 혹시 조금 더 깊게 공부해보고 싶다면 B-Trees and B+Trees. How they are useful in Database 영상을 추천드립니다.
이 번역 작업이 여러분이 인덱스에 대해 공부하는데 도움이 되었으면 좋겠습니다. PostgreSQL 공식 문서가 인덱스에 대해 잘 쓰여져 있어 이전부터 번역을 꼭 해오고 싶었는데요. 흔쾌히 허가해주신 PostgreSQL CoC(Code of Conduct)팀 감사합니다. 이해를 돕기 위해 역자의 의역이 섞여있으니 만약 번역과 원문 간에 차이가 있는 경우 원문을 우선적으로 생각해주세요. 번역 오류는 contact@datarian.io로 제보해주세요.
PostgreSQLPostgreSQL 공식 문서

The World's Most Advanced Open Source Relational Database

함께 읽어보면 좋은 글

주식회사 데이터리안