使postgresql查询规划器使用我的部分gin tsv索引

时间:2017-01-27 17:17:57

标签: sql postgresql

任何人都有窍门让计划者支持我的部分杜松子酒索引?

这是我正在使用的架构。

create table dude (
    id integer primary key,
    first_name text,
    last_name text,
    house_id integer,
    ...)

alter table dude
    add constraint dude_house_id_fkey
    foreign key (house_id) references house (id);

create index ix_dude_house_id on dude (house_id);

create index ix_dude_first_last_name_tsv on dude
    using gin (to_tsvector('my_tsconfig'::regconfig, (first_name::text || ' '::text) || last_name::text)
    where house_id is not null and first_name is not null and last_name is not null;

dude有大约400万条记录,但其中一些记录为null first_name,last_name或email_id。

所以我试图使用查询

来搜索tsv索引
select *
from dude
where
    to_tsquery('my_tsconfig'::regconfig, 'george & michael'::text)
        @@ (to_tsvector('my_tsconfig'::regconfig, (first_name::text || ' '::text) || last_name::text))
    and house_id is not null
    and first_name is not null
    and last_name is not null;

我正在制定的计划是

Index Scan using ix_person_house_id on dude (cost=0.45..46673651.54 rows=8 width=327)
   Index Cond: (house_id IS NOT NULL)
   Filter: ((first_name IS NOT NULL) AND (last_name IS NOT NULL) AND ('''george'' & ''michael'''::tsquery @@ to_tsvector('my_tsconfig'::regconfig, (((first_name)::text || ' '::text) || (last_name)::text))))

规划者偏爱house_id上​​的btree,导致查询速度非常慢。我怀疑这里的问题是我没有正确指定表达式,所以规划者不能考虑使用部分索引。

我应该补充一点,我已经分析了表格,我得到了完全相同的计划。

0 个答案:

没有答案