검색 성능 인덱스

검색 성능 인덱스

그래프 데이터가 커질수록 "이 라벨의 노드를 이 프로퍼티 값으로 빠르게 찾는 일"이 중요해져요. Neo4j의 검색 성능 인덱스(search-performance index) 는 인덱스와 기본 데이터 저장소 사이에서 정확 일치를 더 빨리 꺼내도록 도와주는 장치예요. 이 페이지에서는 Neo4j가 제공하는 네 가지 인덱스 종류와 각각 어떤 술어를 해결하는지 개요를 잡아 드릴게요.

출처: Neo4j Cypher Manual — Search-performance indexes

네 가지 인덱스 종류

Neo4j에는 검색 성능 인덱스가 네 종류 있어요.

  • 범위 인덱스(Range indexes) — Neo4j의 기본 인덱스예요. 대부분의 술어를 지원해요.
  • 텍스트 인덱스(Text indexes)STRING 값에 대한 술어를 해결해요. CONTAINS·ENDS WITH 연산자로 필터링하는 쿼리에 최적화돼 있어요.
  • 포인트 인덱스(Point indexes) — 공간 POINT 값에 대한 술어를 해결해요. 거리나 경계 박스 안 필터링 쿼리에 최적화돼 있어요.
  • 토큰 조회 인덱스(Token lookup indexes) — 노드 라벨과 관계 타입 술어만 해결해요. 즉 프로퍼티를 필터링하는 술어는 해결하지 못해요. Neo4j 데이터베이스를 만들면 노드 라벨용·관계 타입용 토큰 조회 인덱스 두 개가 기본으로 생겨요.

각 인덱스의 생성·조회·삭제 방법과 지원하는 술어 상세는 별도 페이지에서 다룰 수 있어요. 이 페이지에서는 "어떤 인덱스가 무엇을 잘 푸는가"를 중심으로 정리할게요.

인덱스가 자동으로 쓰이는 방식

검색 성능 인덱스는 자동으로 사용돼요. 인덱스가 여러 개라면, Cypher 플래너가 특정 술어를 가장 효율적으로 해결할 수 있는 인덱스(들)를 골라 쓰려고 해요. 다만 USING 키워드로 특정 인덱스를 명시적으로 강제하는 것도 가능해요.

인덱스를 쓰기 전에 생각할 점

인덱스는 성능을 높여 주지만 무조건 많이 만들수록 좋은 건 아니에요. 인덱스는 저장 공간을 차지하고 쓰기 작업에 오버헤드를 더하기 때문에, 실제 쿼리 패턴을 기준으로 필요한 곳에만 만드는 게 좋아요. 데이터가 얼마나 크고, 어떤 술어로 자주 조회하는지에 따라 어떤 인덱스를 쓸지가 달라져요. 자세한 판단 기준은 인덱스가 쿼리 성능에 미치는 영향 페이지에서 계속 이어가 볼게요.

더 알아보기