URL上的PostgreSQL GIN索引

时间:2016-06-28 19:46:30

标签: sql postgresql indexing full-text-search

使用Postgres 9.5和我尝试使用包含URL的列上的LIKE运算符来提高搜索性能。

考虑一个这样的表,大约有5000万行

CREATE TABLE page_hit (
    timestamp_ timestamp without time zone NOT NULL,
    location_url character varying(2048)
)

和像这样的查询

SELECT count(*) 
FROM page_hit 
WHERE location_url LIKE 'http://mysite.foo.com/path/morepath%'

以上查询使用以下索引

CREATE INDEX location_idx
  ON page_hit
  USING btree
  (location_url varchar_pattern_ops);

作品很棒..但是......在字符串的其他部分支持LIKE外卡(例如前导%)我创建了一个GIN索引,如下所示

CREATE INDEX location_idx_gin
  ON page_hit
  USING gin
  (location COLLATE pg_catalog."default" gin_trgm_ops);

问题是当我在上面的查询上运行EXPLAIN ANALYZE时,它现在只使用location_idx_gin并忽略location_idx,这有点糟糕导致location_idx索引在追踪%查询时更快。查询计划程序似乎在所有情况下都忽略了我的BTREE索引并使用了GIN索引。

BTREE指数优于GIN指数(在尾随%的情况下)但我希望计划者仅在领先%的情况下选择GIN指数。有没有办法做到这一点?

某些指标(查询尾随%):

0 个答案:

没有答案