0
我使用pg_trgm擴展來檢查文本列的相似性。我想通過使用附加條件加速它,但沒有成功。速度是一樣的。這是我的例子:postgresql 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;
這是正確的嗎?
那麼你沒有'yesno'或'truefalse'上的任何索引。因此,我認爲Postgres將不得不掃描應用這個WHERE條件,這可能需要一些資源。而且,留下的記錄數量可能仍然很大,在這兩種情況下,Postgres必須按'dist'排序以應用LIMIT條款。 –
@TimBiegeleisen,我添加了索引爲布爾列,它不會影響... –
那麼布爾列只有兩個可能的值,所以基數很高,因此索引可能沒有幫助。 –