postgresql pg_trgm加速条件

时间:2017-08-16 05:41:22

标签: postgresql pg-trgm

我使用pg_trgm扩展来检查文本列的相似性。我想通过使用其他条件加快速度,但没有成功。速度是一样的。这是我的例子:

    create table test (
    id serial,
    descr text,
    yesno text,
    truefalse boolean
    );
    insert into test SELECT generate_series(1,1000000) AS id, 
md5(random()::text) AS descr ; 
    update test set yesno = 'yes' where id < 500000;
    update test set yesno = 'no' where id > 499999;
    update test set truefalse = true where id < 100000;
    update test set truefalse = false where id > 99999;
    CREATE INDEX test_trgm_idx ON test USING gist (descr gist_trgm_ops);

因此,当我执行查询时,我是否使用where子句没有区别。

 select descr <->  '65c141ee1fdeb269d2e393cb1d3e1c09' 
 as dist, descr, yesno, truefalse from test 
   where 
   yesno = 'yes'
   and 
   truefalse = true 
order by dist 
limit 10;

这是对的吗?

1 个答案:

答案 0 :(得分:1)

创建测试数据后,执行ANALYZE以确保更新统计信息。然后,您可以使用EXPLAIN查找。

在我的机器上,它在test_trgm_idx上执行索引扫描以按顺序扫描行,以便在达到限制时停止。因为它必须在达到限制之前扫描更多行,所以实际上稍微有点工作,认为时间差是不明显的。