2008-08-22 3 views
34

찾을 수있는 정보에서 그들은 모두 같은 문제를 해결합니다 - 배열 봉쇄 및 교차와 같은 더 복잡한 작업 (& &, @>, < @ 등). 그러나 나는 어느 쪽을 사용할지 또는 다른 쪽을 사용할 지에 대한 조언에 관심이있다.PostgreSQL : GIN 또는 GiST 인덱스?

  • GIN 인덱스 조회가 약 3 배 빠른 GIST
  • GIN 인덱스보다 GIST
  • GIN 인덱스를 만드는 것보다 약 3 배 더 오래 걸릴 약 10 배 느린 같습니다 PostgreSQL documentation
    이에 대한 몇 가지 정보를 가지고 GIST
  • GIN 인덱스보다 업데이트하는 것은 나는 내가 특히 것이된다 그러나 두에 - 세 가지 요점

보다 큰 배 메모리를 인덱스 크기 배급이 작아지기 시작할 때 성능에 영향이 있는지를 아는 것이 중요합니다. 인덱스 크기가 사용 가능한 메모리보다 훨씬 커집니다)? #postgresql IRC 채널에서 GIN이 모든 인덱스를 메모리에 유지해야한다고 들었습니다. 그렇지 않으면 B-Tree와는 달리 디스크에서 읽을 부분을 알지 못하기 때문에 효과가 없습니다. 특정 쿼리? 문제는 다음과 같을 것입니다.이 사실이 맞습니까? GiST에도 동일한 제한 사항이 있습니까? 이러한 인덱싱 알고리즘 중 하나를 사용할 때 알아야 할 다른 제한 사항이 있습니까?

+0

이 측정치는 사용중인 PG 버전에 따라 다릅니다. 나는 hstore 칼럼에 대해 9.6.1의 테스트를 실행했고 다음과 같은 결과를 얻었다. GiST는 GIN보다 빌드하는데 4.1 배의 시간이 걸리고, 조회에는 약 170 배 느렸다. 당신이 인용 한 수치에 가깝지도 않습니다. – IamIC

답변

14

우선 텍스트 검색 인덱싱에 사용해야합니까? GIN 및 GiST는 일부 데이터 유형에 특화된 색인입니다. 단순한 char 또는 정수 값을 색인해야하는 경우 일반 B-Tree 색인이 가장 좋습니다.
어쨌든, PostgreSQL 문서에는 GIST에 대한 장이 있고 GIN에있는 장이 있습니다. 자세한 정보를 찾을 수 있습니다.
그리고 가장 좋은 방법은 샘플 데이터를 생성 한 다음 (실제 시나리오에 필요한만큼) GIST 색인을 생성하고,이를 작성하는 데 필요한 시간을 측정하는 것입니다. 색인, 새 값 삽입, 샘플 조회 실행 그런 다음 색인을 삭제하고 GIN 색인으로 동일하게하십시오. 값을 비교하면 데이터를 기반으로 필요한 답변을 얻을 수 있습니다.

+8

네,하지만 문제는 시간이었습니다. 누군가가 이미 알고있는 경우에 물어 보는 것이 현명합니다 ... –

+11

나는 당신 자신의 데이터를 생성하는 것이 유일한 대답이라고 생각합니다. 며칠 동안 인덱스와 함께 인덱스를 삽입하거나 postgres.sql의 설정을 변경하고 #postgis/# postgresql에있는 사람들과 이야기를하고 결국에는 전체 텍스트 및 공간에 대한 전체 텍스트와 공간의 컨텍스트에서 할 수있는 모든 것을 읽을 수있었습니다. 결론적으로 필자의 구체적인 사용법은 실제 데이터의 큰 부분 집합으로 테스트 테이블을로드하고 테스트하는 유일한 방법이었다. 여기저기서 하루를 절약하기 위해 설치하는 동안 서두르다가 다음 해에 몇 주를 낭비하게됩니다. 힘든 경험을 통해 배웠습니다. –

관련 문제