문제

최근에 Postgres 데이터베이스를 최적화하기 위해 노력해 왔으며 전통적으로 B-Tree Indexes 만 사용해 본 적이 있습니다. 그러나 GIST 인덱스가 Postgres 8.3 문서에서 비 유니 키크, 멀티 컬럼 인덱스를 수포하는 것을 보았습니다.

그러나 나는 그들 사이의 실제 차이가 무엇인지 알 수 없었습니다. 나는 동료 코더가 Beable, 그들 사이의 장단점이 무엇인지, 그리고 더 중요한 이유는 내가 다른 것을 사용하는 이유를 설명하기를 바랐다.

도움이 되었습니까?

해결책

간단히 말해서 : B- 트리 인덱스는 더 잘 작동하지만 GIST 인덱스는 더 유연합니다. 일반적으로 B-Tree 인덱스가 데이터 유형에서 작동하는 경우를 원합니다. PG 목록에 GIST 인덱스 사용에 대한 큰 성능에 대한 최근의 게시물이있었습니다. 그들은 B- 트리보다 느리게 될 것으로 예상되지만 (유연성의 가격은) 저것 훨씬 느리게 ... 일은 당신이 기대할 수 있듯이 진행 중입니다.

에서 Tom Lane의 게시물, 핵심 PostgreSQL 개발자 :

요점의 주요 요점은 BTREE에서 단순히 색인 할 수없는 쿼리를 색인화 할 수 있다는 것입니다. ... Btree가 Btree-indexable 사례에 대한 요점을 이길 것으로 기대할 것입니다. 나는 여기서 중요한 점은 그것이 수백의 한 자만으로 이기고 있다는 것입니다. 그것은 매우 끔찍하며 일부 구현 문제를 가리킬 수 있습니다.

다른 팁

기본적으로 모든 사람의 맞습니다 -Btree는 매우 잘 수행하므로 기본 인덱스입니다. GIST는 다소 다른 짐승입니다. 자체 인덱스 유형보다 "인덱스 유형을 작성하는 프레임 워크"에 가깝습니다. 사용하려면 사용자 정의 코드 (서버)를 추가해야하지만 반면에 매우 유연합니다.

일반적으로 - 당신이 사용하고있는 데이터 유형이 당신에게 그렇게하도록 지시하지 않는 한, 당신은 GIST를 사용하지 않습니다. GIST를 사용하는 데이터 유형의 예 : LTREE (From Contrib), TSVECTOR (8.3 이후 코어에서 8.2까지 Contrib/Tsearch) 및 기타.

Postgresql -Postgis에 잘 알려진 매우 빠른 지리적 확장이 있습니다.http://postgis.refractions.net/) 목적으로 GIST를 사용합니다.

GIST 지수는 어느 정도 손실이므로 DBMS는 잘못된 양성/네거티브를 다루어야합니다.

각 문서는 고정 길이 서명으로 인덱스에 표시되므로 GIST 인덱스는 손실됩니다. 시그니처는 각 단어를 N- 비트 문자열의 임의 비트로 해싱하여 생성되며,이 모든 비트는 함께 OR-ED를 통해 N-BIT 문서 서명을 생성합니다. 두 단어가 같은 비트 위치에 해시되면 허위 일치가 발생합니다. 쿼리의 모든 단어에 일치 (실제 또는 거짓)가 있으면 테이블 행을 검색하여 일치가 올바른지 확인해야합니다. B- 트리에는이 동작이 없으므로 색인화되는 데이터에 따라 두 가지 사이에 성능 차이가있을 수 있습니다.

텍스트 검색 동작을 참조하십시오 http://www.postgresql.org/docs/8.3/static/textsearch-indexes.html 그리고 http://www.postgresql.org/docs/8.3/static/indexes-types.html 범용 비교를 위해.

요점은보다 일반적인 색인입니다. B-Tree와 함께 사용할 수있는 더 넓은 목적으로 사용할 수 있습니다. GIST를 사용하여 B- 트리를 구축하는 능력을 포함합니다.

IE : GIST를 사용하여 지리적 지점 또는 지리적 영역에서 B- 트리 색인으로 할 수없는 것입니다. B- 트리에 중요한 유일한 것은 키 (또는 키)이므로 인덱싱 중입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top