모든 문서에 언급 된 내용에도 불구하고 GIN 인덱스가 pg_trgm 관련 검색의 GIST 인덱스보다 상당히 느리다는 것을 알게되었습니다. 이것은 비교적 짧은 텍스트 필드 (평균 길이 21 자)가있는 2 천 5 백만 행의 표에 있습니다. 대부분의 텍스트 행은 "123 Main st, City"형식의 주소입니다.PostgreSQL GIN 색인이 pg_trgm에 대해 GIST보다 느립니다.
GIST 지수는
select suggestion from search_suggestions where suggestion % 'seattle';
같은 검색을 약 4 초 정도 걸립니다 그러나 GIN은 90 초 정도 걸리며 다음과 같은 결과가 EXPLAIN ANALYZE
으로 실행하는 경우 : 100 만 이상 행이되고 있다는
Bitmap Heap Scan on search_suggestions (cost=330.09..73514.15 rows=25043 width=22) (actual time=671.606..86318.553 rows=40482 loops=1)
Recheck Cond: ((suggestion)::text % 'seattle'::text)
Rows Removed by Index Recheck: 23214341
Heap Blocks: exact=7625 lossy=223807
-> Bitmap Index Scan on tri_suggestions_idx (cost=0.00..323.83 rows=25043 width=0) (actual time=669.841..669.841 rows=1358175 loops=1)
Index Cond: ((suggestion)::text % 'seattle'::text)
Planning time: 1.420 ms
Execution time: 86327.246 ms
주 실제로 40k 행만 일치하더라도 색인에 의해 선택됩니다. 이것이 왜 그렇게 잘 수행되지 않는가? 이것은 PostgreSQL 9.4에 있습니다.
성능 질문에 대한 일부 정보가 누락되어있다. 테이블 정의, 테이블 및 인덱스의 전체 크기. [여기 지침을 참조하십시오.] –