1. PostgreSQL의 GiST 인덱스는 무엇이며, 어떤 특징을 가지고 있나요?
- Gist 인덱스는 다양한 복합 데이터 유형을 위한 맞춤형 검색트리를 생성하는 유연한 프레임워크로, B-트리로는 처리하기 어려운 공간 데이터나 전문 검색 등에 활용된다.
2. PostgreSQL Gist 인덱스 개요 및 B-tree와의 비교
2-1 Gist 인덱스 소개 : Gist 인덱스는 Generalized Search Tree의 약자이며, 특정 인덱스 유형이 아니라 다양한 데이터 유형에 사용될 수 있는 커스텀 검색 트리를 생성하기 위한 프레임워크 또는 템플릿이다.
2-2 B-tree와의 차이점:
a. B-tree 인덱스는 특정 데이터 유형에 묶여 있으며, 탐색 시 less than, greater than, equal to 연산자만을 사용하여 데이터를 비교한다.
b. B-tree는 텍스트, 숫자, 날짜와 같이 비교 방식이 명확한 기본 데이터를 검색하는 데 적합하다.
c. 반면, GiST 인덱스는 좌표(coordinates), 이미지, 전문 텍스트 문서와 같은 복잡한 데이터 유형을 처리할 때 유용하다.
3. Gist 인덱스의 공간데이터 처리 원리
3-1 목표 : 전체 테이블을 스캔하는 대신, 데이터의 일부만 빠르게 필터링하여 검색 시간을 단축하는 트리 구조를 구축 하는 것이다.
3-2 데이터 구성 방식 : 공간 데이터를 직사각형으로 묶어 그룹화하여 데이터를 구성한다. -> 이것을 MBR이라고 부른다.
a. 직사각형의 좌표를 알기 때문에 검색하려는 지점이 특정 그룹 내에 있는지 쉽게 확인할 수 있다.
예시를 들어보자

- 지도에 여러 개의 Point 데이터가 있다고 가정하자.

- Gist 인덱스를 생성하면 PostgreSQL은 이 Point들을 단순히 나열하는 방식이 아니라, '트리 구조(R-tree 계열)'로 저장한다
- 가장 위층(root node)에는 모든 Point를 포함할 수 있는 가장 큰 사각형이 저장된다. (위 사진에 1로 되어 있는 사각형)
- 이 MBR에는 이 데이터 전체의 최소 X값, 최대 X값, 최소 Y값, 최대 Y값이 기록되어 있다. (사각형에 최소 x,y 값 최대 x,y 값 저장)

- 그 아래 레벨에는 해당 큰 영역을 다시 몇 개의 더 작은 MBR 조각으로 나누어 저장하고,각 레벨마다 더 좁은 영역을 가지는 MBR들이 포함된다.

- 위 사진 처럼 트리 구조로 2a, 2b가 저장 되며 각 x,y 최소 최댓 값이 저장이 된다.

- 여기서 더 작은 범위의 MBR들이 그룹화되어 저장되면 위 아래에 트리처럼 생성이 된다.
- 예를 들어 특정 영역(3B)에 속하는 좌표(Point)를 찾는다고 하면, PostgreSQL은 인덱스를 다음과 같은 방식으로 탐색한다.

- 1 → (Root MBR: 전체 영역)
- 2A → (Root 내부의 더 작은 MBR 그룹 중 검색 좌표를 포함하는 후보 영역)
- 3B → (2A 내부에서도 검색 좌표가 포함된 더 작은 MBR)
- 이처럼 GiST 인덱스는 상위 MBR에서 하위 MBR로 점점 범위를 좁혀가며 탐색하며, 마지막 Leaf Node에서 실제 geometry(Point, Line, Polygon 등)를 확인한다.