postgres全文搜索查询大表不使用索引

时间:2017-05-27 14:05:42

标签: postgresql full-text-indexing

全文搜索查询

SELECT id
 FROM (
   SELECT id, 
   ts_rank_cd(setweight(to_tsvector('english', lower(title)), 'A') || 
   setweight(to_tsvector('english', lower(body)), 'B'), 
   plainto_tsquery('english', 'query')) AS rank
   FROM table) s
 ORDER BY rank DESC LIMIT 50 OFFSET 0;

创建索引命令

CREATE INDEX fts_index ON table USING 
gin((setweight(to_tsvector('english', lower(title)), 'A') || 
setweight(to_tsvector('english', lower(body)), 'B')));"

该表包含超过90,000行,但postgres选择执行顺序扫描,这需要几分钟,而不是使用索引。

1 个答案:

答案 0 :(得分:0)

无法使用索引。

此处唯一使用的索引是支持ORDER BY子句,为此,索引必须是完整表达式上的常规B树索引,即在您的查询中命名为rank