儘管所有的文檔都說,我發現GIN索引比pg_trgm相關搜索的GIST索引慢得多。這是一張2500萬行的表格,文字字段相對較短(平均長度爲21個字符)。大部分文本行都是「123 Main St,City」形式的地址。PostgreSQL的GIN索引比GIST的pg_trgm慢?
GIST指數大約需要4秒,像
select suggestion from search_suggestions where suggestion % 'seattle';
一個搜索,但GIN需要90秒,然後EXPLAIN ANALYZE
運行時,下面的結果:
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上。
一些信息的性能問題是缺少。表定義,表和索引的總大小。 [見說明這裏。](https://stackoverflow.com/tags/postgresql-performance/info) –