이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 12.9. 텍스트 검색을위한 우선 토토 커뮤니티 사이트 추천 유형버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

12.9. 토토 커뮤니티 및 GIN 지수 유형

속도를 높이는 데 사용할 수있는 두 가지 종류의 인덱스가 있습니다. 전문 검색. 인덱스는 전체적으로 필수가 아닙니다 텍스트 검색이지만 열이 검색되는 경우 정기적으로 지수는 일반적으로 바람직합니다.

색인 생성이름on테이블토토 커뮤니티 사용 ();

토토 커뮤니티 (일반 검색 트리) 기반 인덱스를 만듭니다. 그만큼tsvector또는tsquery타입.

색인 생성이름on테이블gin 사용 ();

GIN (Generalized Berverted Index) 기반 인덱스를 만듭니다. 그만큼TSVECTOR타입.

둘 사이에는 실질적인 성능 차이가 있습니다 색인 유형이므로 사용해야 할 사항을 이해하는 것이 중요합니다.

토토 커뮤니티 지수는Lossy색인은 허위 일치를 생성 할 수 있으며 확인해야합니다. 그러한 허위 일치를 제거하기위한 실제 테이블 행.postgresql자동으로; 예를 들어 아래 쿼리 계획에서필터 :줄은 인덱스 출력을 나타냅니다 다시 확인됩니다 :

설명 *에서 * textsearch @@ to_tsquery ( 'supernovae')에서 apod에서 선택하십시오.
                               쿼리 계획
----------------------------------------------------------------------------------------------------
 APOD에서 TextSearch_gidx를 사용한 색인 스캔 (비용 = 0.00..12.29 행 = 2 너비 = 1469)
   색인 조건 : (TextSearch @@ '' ''supernova '' ':: tsquery)
   필터 : (textsearch @@ '' ''supernova '' ':: tsquery)

각 문서가 고정 길이 서명으로 인덱스. 서명이 생성됩니다 N- 비트 문자열의 임의 비트로 각 단어를 해시하여 이 모든 비트는 N- 비트 문서를 제작하기 위해 함께 오르기 서명. 두 단어가 그곳에서 같은 비트 위치에 해시 될 때 허위 경기가 될 것입니다. 쿼리의 모든 단어에 일치하는 경우 (실제 또는 거짓) 그런 다음 테이블 행을 검색하여 경기가 맞습니다.

손실은 쓸모없는 성능 저하를 유발합니다 테이블 레코드를 가져옵니다. 부터 테이블 레코드에 대한 임의의 액세스는 느리기 때문에 요점 지수의 유용성. 허위 일치의 가능성 몇 가지 요인, 특히 고유 한 수에 따라 다릅니다. 단어, 사전을 사용 하여이 숫자를 줄이는 것은 다음과 같습니다 추천.

진 인덱스는 손실되지 않지만 성능은 달라집니다 독특한 단어의 수에 대한 로그.

실제로, 진 인덱스는의 단어 만 저장합니다.TSVECTOR값은 무게가 아닙니다 라벨. 따라서 진 지수는 가중치를 지정하지 않는 쿼리는 하다. 따라서 쿼리를 사용할 때는 테이블 행이 다시 확인됩니다. 무게가 포함됩니다. 불행히도, 현재의 디자인에서PostgreSQL, 재확인 여부 필요한 것은 특정 연산자의 정적 속성이며 에 따라 비행을 활성화하거나 비활성화 할 수있는 것 연산자에게 주어진 값. 이 상황을 다루기 위해 그렇지 않은 쿼리에서 재확인의 오버 헤드를 부과하지 않고 필요, 다음 접근 방식이 채택되었습니다.

  • 표준 텍스트 매치 연산자@@Gin Indexes에 대한 거친 사람으로 표시됩니다.

  • 추가 성냥 연산자@@@가 제공되며 진 인덱스의 손실로 표시됩니다. 이것 연산자는 똑같이 동작합니다@@그렇지 않으면.

  • 진 인덱스 검색이 시작될 때@@운영자 인덱스 지원 코드가 던져집니다 쿼리에 가중치를 지정하는 경우 오류입니다. 이것은 보호합니다 재확인 실패로 인한 잘못된 답변을하지 않음 무게.

간단히 말해@@@오히려 보다@@GIN 인덱스 검색을 수행합니다 중량 제한과 관련된 쿼리. 그렇지 않은 쿼리 중량 제한이 있으면 운영자가 작동하지만@@더 빠릅니다. 이 어색함은 할 것입니다 아마도의 향후 릴리스에서 다루어 질 것입니다.PostgreSQL.

사용할 인덱스 유형, GIST 또는 GIN을 선택할 때 고려하십시오. 이러한 성능 차이점 :

  • 진 인덱스 조회는보다 약 3 배 더 빠릅니다 요점

  • 진 인덱스는 빌드하는 데 약 3 배 더 걸립니다. 요점

  • 진 인덱스는 업데이트보다 약 10 배 느립니다. 요점

  • 진 인덱스는 토토 커뮤니티보다 2-3 배 더 큽니다

경험상인덱스는 조회가 더 빠르기 때문에 정적 데이터에 가장 적합합니다. 을 위한 동적 데이터, 토토 커뮤니티 인덱스는 업데이트가 더 빠릅니다. 구체적으로,토토 커뮤니티인덱스가 매우 좋습니다 동적 데이터와 고유 한 단어 (lexemes)의 수가 100,000 미만,인덱스는 100,000+ lexemes를 더 잘 처리하지만 속도가 느립니다. 업데이트.

참고gin인덱스 빌드 시간을 증가시켜 종종 개선 될 수 있습니다maintenance_work_mem, 하는 동안토토 커뮤니티인덱스 빌드 시간입니다 해당 매개 변수에 민감하지 않습니다.

큰 컬렉션의 파티셔닝 및 GIST의 적절한 사용 및 Gin Indexes는 매우 빠른 검색을 구현할 수 있습니다. 온라인 업데이트. 분할은 데이터베이스 수준에서 수행 할 수 있습니다 테이블 상속 사용 및제약 _exclusion또는 문서 배포 서버 및를 사용하여 검색 결과를 수집합니다.Contrib/DBlink확장 모듈. 후자는입니다 순위 기능은 로컬 만 사용하기 때문에 가능합니다 정보.