이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 12.9. 텍스트 검색을위한 우선 토토 사이트 추천 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

12.9. 토토 베이 및 GIN 지수 유형

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

색인 생성이름켜짐테이블요점 사용();

토토 베이(일반 검색 트리) 기반 색인을 생성합니다.다음 중 하나일 수 있음ts벡터또는tsquery유형.

색인 생성이름켜짐테이블진 사용();

GIN(Generalized Inverted Index) 기반 인덱스를 생성합니다.다음 중 하나여야 함ts벡터유형.

두 가지 색인 유형 간에는 상당한 성능 차이가 있으므로 해당 특성을 이해하는 것이 중요합니다.

토토 베이 인덱스는손실, 이는 인덱스가 잘못된 일치를 생성할 수 있으며 이러한 잘못된 일치를 제거하려면 실제 테이블 행을 확인해야 함을 의미합니다. (PostgreSQL필요할 때 자동으로 이 작업을 수행합니다.) 토토 베이 인덱스는 각 문서가 고정 길이 서명으로 인덱스에 표시되므로 손실이 있습니다. 서명은 각 단어를 n비트 문자열의 단일 비트로 해싱하고 이러한 모든 비트를 함께 OR하여 n비트 문서 서명을 생성함으로써 생성됩니다. 두 단어가 동일한 비트 위치로 해시되면 잘못된 일치가 발생합니다. 쿼리의 모든 단어에 일치 항목(실제 또는 거짓)이 있으면 일치 항목이 올바른지 확인하기 위해 테이블 행을 검색해야 합니다.

손실은 잘못된 일치로 판명되는 테이블 레코드의 불필요한 가져오기로 인해 성능 저하를 유발합니다. 테이블 레코드에 대한 무작위 액세스가 느리기 때문에 GiST 인덱스의 유용성이 제한됩니다. 잘못된 일치 가능성은 여러 요인, 특히 고유 단어 수에 따라 달라지므로 사전을 사용하여 이 수를 줄이는 것이 좋습니다.

GIN 인덱스는 표준 쿼리에 대해 손실이 없지만 성능은 고유 단어 수에 따라 대수적으로 달라집니다. (단, GIN 인덱스는 다음의 단어(어휘소)만 저장합니다.ts벡터값이 아닌 무게 라벨이 포함됩니다. 따라서 가중치가 포함된 쿼리를 사용할 때는 테이블 행 재검사가 필요합니다.)

GiST 또는 GIN 중에서 사용할 인덱스 유형을 선택할 때 다음 성능 차이를 고려하십시오.

  • GIN 인덱스 조회는 토토 베이보다 약 3배 빠릅니다.

  • GIN 인덱스는 토토 베이보다 빌드하는 데 약 3배 더 오래 걸립니다.

  • GIN 인덱스는 GiST 인덱스보다 업데이트 속도가 약간 느리지만 빠른 업데이트 지원이 비활성화된 경우에는 약 10배 더 느립니다(참조섹션 58.4.1자세한 내용은)

  • GIN 인덱스는 토토 베이 인덱스보다 2~3배 더 큽니다.

어림짐작으로 볼 때,색인은 조회가 더 빠르기 때문에 정적 데이터에 가장 적합합니다. 동적 데이터의 경우 토토 베이 인덱스가 업데이트되는 속도가 더 빠릅니다. 구체적으로,지스트색인은 동적 데이터에 매우 적합하며 고유 단어(어휘소)의 수가 100,000개 미만인 경우 빠릅니다.색인은 100,000개 이상의 어휘를 더 잘 처리하지만 업데이트 속도가 느립니다.

참고하세요색인 빌드 시간은 종종 증가하여 향상될 수 있습니다.maintenance_work_mem, 그동안지스트색인 빌드 시간은 해당 매개변수에 민감하지 않습니다.

큰 컬렉션의 분할과 GiST 및 GIN 색인의 적절한 사용으로 온라인 업데이트를 통해 매우 빠른 검색을 구현할 수 있습니다. 파티셔닝은 테이블 상속을 사용하여 데이터베이스 수준에서 수행하거나 서버에 문서를 배포하고 다음을 사용하여 검색 결과를 수집하여 수행할 수 있습니다.dlink모듈. 후자는 순위 함수가 지역 정보만을 사용하기 때문에 가능합니다.