[Postgres] 인덱스의 종류

최대한·2023년 4월 23일
0
  • Hash

    • 10.0 이전에는 WAL 지원이 안됐지만 현재는 가능하여 replication 가능
      • 사이즈가 b-tree 보다 약간 더 큼
    • 32bit 로 해싱하여 동등비교
    • 속도가 굉장히 빠르다
  • GiST (Generalized Search Tree)

    • R 트리 동작 구현을 위해 사용됨
    • Range type
    • Geometric indexes
    • 상속 구조
    • Fuzzy searching
      • pg_tgram (trigram) Extension 을 사용하여 구현 가능
    • 커스텀 operator 들을 이용해 확장 가능. strategy 선택 가능
    • 여러 function 지원 (consistent, union, compress, decompress... etc)

Fuzzy searching: a technique used in text search that allows for approximate matches to be returned, even when the search term contains errors or variations. Fuzzy searching is particularly useful in applications such as spell-checking, autocomplete, and search engines.

  • GIN (Generalized Inverted)

    • document 에 있는 특정 key 를 기준
    • elastic search 의 역 인덱스 (inverted index)
    • 사이즈가 작고 컴팩트
    • 정렬 기능 x
    • operation strategy 적용하여 확장 가능
    • function 지원
  • SP-GiST (Space Partitioned GiST)

    • spatial 용. 인덱스된 object 가 필요하지 않다
    • in-memory 용
    • disk 에 저장될 경우 기능을 사용하기 위해 disk hit 이 너무 높음
  • BRIN (Block Range Indexes)

    • 다른 index 들은 포인터를 저장하기 때문에 용량이 상대적으로 많음
    • 최소한의 사이즈만 가져감. max 128 blocks (1 MB, 1block = 8KB)
    • 데이터가 섞여있을 경우 사용하기 어려움
      • warehouse 은 보통 시간기반으로 로드되기 때문에 상관관계가 매우 높다
    • 데이터 블락 밀집도가 높은 컬럼에 유리 (log, warehousing 등)
    • 다른 non-timestamp column 이 추가될 경우 사용하기 어려움
  • Custom indexes

    • bloom extension 이용 가능
      • 몇개의 컬럼을 인덱싱하던 상관없음
      • falsy true 가 나올 수 있기 때문에 검증을 잘 해야함
profile
Awesome Dev!

0개의 댓글