전체 텍스트 검색 속도를 높이는 데 사용할 수 있는 두 가지 종류의 색인이 있습니다.진그리고GiST. 전체 텍스트 검색에 사설 토토가 필수는 아니지만 정기적으로 열을 검색하는 경우 일반적으로 사설 토토가 바람직합니다.
그러한 색인을 생성하려면 다음 중 하나를 수행하십시오:
GIN 색인은 선호되는 텍스트 검색 색인 유형입니다. 역색인으로서 각 단어(어휘소)에 대한 색인 항목과 일치하는 위치의 압축 목록이 포함되어 있습니다. 다중 단어 검색은 첫 번째 일치 항목을 찾은 다음 색인을 사용하여 추가 단어가 부족한 행을 제거할 수 있습니다. GIN 인덱스는 다음의 단어(어휘소)만 저장합니다.ts벡터값이 아니라 무게 라벨이 아닙니다. 따라서 가중치가 포함된 쿼리를 사용할 때는 테이블 행 재검사가 필요합니다.
GiST 인덱스는손실, 즉 인덱스가 잘못된 일치를 생성할 수 있으며 이러한 잘못된 일치를 제거하려면 실제 테이블 행을 확인해야 함을 의미합니다. (PostgreSQL필요할 때 자동으로 이 작업을 수행합니다.) GiST 인덱스는 각 문서가 고정 길이 서명으로 인덱스에 표시되므로 손실이 있습니다. 서명은 각 단어를 n비트 문자열의 단일 비트로 해싱하고 이러한 모든 비트를 함께 OR하여 n비트 문서 서명을 생성함으로써 생성됩니다. 두 단어가 동일한 비트 위치로 해시되면 잘못된 일치가 발생합니다. 쿼리의 모든 단어에 일치 항목(실제 또는 거짓)이 있으면 일치 항목이 올바른지 확인하기 위해 테이블 행을 검색해야 합니다.
손실은 잘못된 일치로 판명된 테이블 레코드의 불필요한 가져오기로 인해 성능 저하를 유발합니다. 테이블 레코드에 대한 무작위 액세스가 느리기 때문에 GiST 인덱스의 유용성이 제한됩니다. 잘못된 일치 가능성은 여러 요인, 특히 고유 단어 수에 따라 달라지므로 사전을 사용하여 이 수를 줄이는 것이 좋습니다.
참고진색인 빌드 시간은 종종 증가하여 향상될 수 있습니다.maintenance_work_mem, 그동안지스트색인 빌드 시간은 해당 매개변수에 민감하지 않습니다.
큰 컬렉션을 분할하고 GIN 및 GiST 색인을 적절하게 사용하면 온라인 업데이트를 통해 매우 빠른 검색을 구현할 수 있습니다. 파티셔닝은 테이블 상속을 사용하여 데이터베이스 수준에서 수행하거나 서버에 문서를 배포하고 다음을 사용하여 검색 결과를 수집하여 수행할 수 있습니다.dlink모듈. 후자는 순위 함수가 지역 정보만을 사용하기 때문에 가능합니다.